Spring基於註解方式實現屬性注入(超詳細)
阿新 • • 發佈:2021-01-18
基於註解方式實現屬性注入
註解 | 說明 |
---|---|
@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