基于注解方式實作屬性注入
- 首先需要開啟開啟組件掃描
- 注入物件型別屬性
- 注入普通型別屬性
| 注解 | 說明 |
|---|---|
| @AutoWired | 根據屬性型別自動裝配 |
| @Qualifier | 根據屬性的名稱注入要和@AutoWired一起使用 |
| @Resource | 可以根據型別輸入也可以根據名稱注入 |
| @Value | 注入普通型別屬性 |
上面的三種是注入物件的,@Value是注入普通型別屬性的(如String),
首先需要開啟開啟組件掃描
bean1.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--開啟組件掃描-->
<context:component-scan base-package="com.Keafmd"></context:component-scan>
</beans>
注入物件型別屬性
需求:我們通過注解的方式在UserService呼叫UserDaoImpl的方法,
第一步:把service和dao物件創建,在service和dao類添加創建物件的注解,
第二步:在service注入dao物件,
UserDao介面:
package com.Keafmd.spring5.dao;
/**
* Keafmd
*
* @ClassName: UserDao
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-17 15:39
*/
public interface UserDao {
public void add();
}
UserDaoImpl實作類:
package com.Keafmd.spring5.dao;
import org.springframework.stereotype.Repository;
/**
* Keafmd
*
* @ClassName: UserDaoImpl
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-17 15:39
*/
@Repository("userDaoImpl01")
public class UserDaoImpl implements UserDao{
@Override
public void add() {
System.out.println("dao add ...");
}
}
UserService類:
package com.Keafmd.spring5.service;
import com.Keafmd.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Keafmd
*
* @ClassName: UserService
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-17 13:15
*/
//在注解里的value值可以不寫,默認就是類的首字母小寫 userService
// @Component(value = "userService") //<bean id="userService" class=".."/>
@Service
public class UserService {
//定義dao型別屬性 ,不需要添加set方法了
//添加注入屬性的注解
/* @Autowired
@Qualifier(value = "userDaoImpl01") // 要和@AutoWired一起使用 ,填寫value值是為了解決有多個實作類,根據型別的話就沒法區分
private UserDao userDao;*/
// @Resource //根據型別注入
@Resource(name = "userDaoImpl01") // 根據名稱注入
private UserDao userDao;
public void add(){
System.out.println("service add......");
userDao.add();
}
}
測驗類:
package com.Keafmd.spring5.testdemo;
import com.Keafmd.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Keafmd
*
* @ClassName: TestSpring5Demo1
* @Description: 測驗類
* @author: 牛哄哄的柯南
* @date: 2021-01-17 13:03
*/
public class TestSpring5Demo1 {
@Test
public void testService(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userService",UserService.class);
System.out.println(userService);
userService.add();
}
}
測驗結果:
com.Keafmd.spring5.service.UserService@7ea37dbf
service add......
dao add ...
Process finished with exit code 0
service和dao中的內容都輸出了,證明基于注解方式實作物件屬性的注入就成功了,
注入普通型別屬性
修改UserService類,添加一個String型別的屬性,并使用@Value注解對普通型別的屬性進行注入,在添加一個輸出陳述句方便測驗,
UserService類:
package com.Keafmd.spring5.service;
import com.Keafmd.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Keafmd
*
* @ClassName: UserService
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-17 13:15
*/
//在注解里的value值可以不寫,默認就是類的首字母小寫 userService
// @Component(value = "userService") //<bean id="userService" class=".."/>
@Service
public class UserService {
@Value(value = "Keafmd")
private String name;
//定義dao型別屬性 ,不需要添加set方法了
//添加注入屬性的注解
/* @Autowired
@Qualifier(value = "userDaoImpl01") // 要和@AutoWired一起使用 ,填寫value值是為了解決有多個實作類,根據型別的話就沒法區分
private UserDao userDao;*/
// @Resource //根據型別注入
@Resource(name = "userDaoImpl01") // 根據名稱注入
private UserDao userDao;
public void add(){
System.out.println("name:"+name);
System.out.println("service add......");
userDao.add();
}
}
其他類和測驗類不變,
測驗結果:
com.Keafmd.spring5.service.UserService@7ea37dbf
name:Keafmd
service add......
dao add ...
Process finished with exit code 0
輸出了Keafmd就證明成功的使用注解的方式注入了name屬性,
以上就完成了基于注解方式實作屬性注入,
看完如果對你有幫助,感謝點贊支持!
如果你是電腦端的話,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

加油!
共同努力!
Keafmd
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/250675.html
標籤:java
上一篇:【每日藍橋】8、一三年省賽JavaC組真題“列印十字圖”
下一篇:【nuitka】 Fatal Python error: Py_Initialize: unable to load the file system codec
