05.bean依赖注入的三种方式
生活随笔
收集整理的這篇文章主要介紹了
05.bean依赖注入的三种方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
05.bean依賴注入的三種方式
1.概述
依賴注入 DI(Dependency Injection):它是 Spring 框架核心 IOC 的具體實現。
在編寫程序時,通過控制反轉,把對象的創建交給了 Spring,但是代碼中不可能出現沒有依賴的情況。IOC 解耦只是降低他們的依賴關系,但不會消除。例如:業務層仍會調用持久層的方法。
那這種業務層和持久層的依賴關系,在使用 Spring 之后,就讓 Spring 來維護了。簡單的說,就是通過框架把持久層對象傳入業務層,而不用我們自己去獲取。
2.bean依賴注入方式
2.1 構造方法
2. 配置Spring容器調用有參構造時進行注入
<bean id="userDao" class="com.weihong.dao.impl.UserDaoImpl" scope="prototype"></bean><bean id="userService" class="com.weihong.service.serviceImp.UserServiceImp" ><constructor-arg name="userDao" ref="userDao" ></constructor-arg><!-- name:表示UserServiceImpl里UserDao對象的參數ref:表示引用的是bean對象id為UserDao的對象--></bean>-
上面配置等價于
2.2 set方法
等價于以下代碼:
2.3 P命名空間注入
P命名空間注入本質也是set方法注入,但比起上述的set方法注入更加方便,主要體現在配置文件中,如下:
3.bean依賴注入的數據類型
上面的注入都是注入Bean對象,除了對象的引用注入,普通數據類型和集合都可以在容器中進行注入。
注入數據的三種數據類型
其中引用數據類型,上述已經介紹過了,下面將以set方法注入為例,演示普通數據類型和集合數據類型的注入。
3.1注入普通數據類型
3.2注入集合數據類型
3.2.1List集合注入
public class UserDaoImpl implements UserDao {private String username;private Integer age;private List<Object> userlist;public List<Object> getUserlist() {return userlist;}public void setUserlist(List<Object> userlist) {this.userlist = userlist;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public void save(){System.out.println(" list = " + userlist);} }appplicationContext.xml配置文件
<!-- user實體的bean對象--><bean id="user" class="com.weihong.domain.User"><property name="userName" value="李白"></property><property name="age" value="26"></property></bean> <!--List集合注入--><bean id="userDao3" class="com.weihong.dao.impl.UserDaoImpl" ><property name="userlist" ><list> <!-- value:表示list集合第一個值為基本數據類型ref:表示引用的數據對象user(也就是list的第二個值) --><value>666</value><ref bean="user"></ref></list></property></bean>測試類
@Testpublic void test4(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao1 = (UserDao) applicationContext.getBean("userDao3");userDao1.save();}測試結果
3.2.2set集合注入
配置基本和list集合一樣
public class UserDaoImpl implements UserDao {private String username;private Integer age;private List<Object> userlist;private Set<Object> set; //set集合public void save(){System.out.println(" list = " + userlist);System.out.println(" set = " + set);} } <!-- user實體的bean對象--><bean id="user" class="com.weihong.domain.User"><property name="userName" value="李白"></property><property name="age" value="26"></property></bean> <!--List集合注入--><bean id="userDao3" class="com.weihong.dao.impl.UserDaoImpl" ><property name="userlist" ><list> <!-- value:表示list集合第一個值為基本數據類型ref:表示引用的數據對象user(也就是list的第二個值) --><value>666</value><ref bean="user"></ref></list></property><property name="set"><set><value>我是set集合</value><ref bean="user"></ref></set></property></bean>3.2.3Array數組注入
public class UserDaoImpl implements UserDao {private String username;private Integer age;private List<Object> userlist;private Set<Object> set; //set集合private Object[] arrary; //數組public void save(){System.out.println(" list = " + userlist);System.out.println(" set = " + set);System.out.println(" arrary = " + Arrays.toString(arrary));//數組轉換成字符串} } <!-- user實體的bean對象--><bean id="user" class="com.weihong.domain.User"><property name="userName" value="李白"></property><property name="age" value="26"></property></bean> <!--List集合注入--><bean id="userDao3" class="com.weihong.dao.impl.UserDaoImpl" > <!-- 數組注入--><property name="arrary"><array><value>arrary</value><ref bean="user"></ref></array></property></bean>3.2.4Map集合注入
public class UserDaoImpl implements UserDao {private String username;private Integer age;private List<Object> userlist;private Set<Object> set; //set集合private Object[] arrary; //數組private Map<String,Object> map;public void save(){System.out.println(" list = " + userlist);System.out.println(" set = " + set);System.out.println(" arrary = " + Arrays.toString(arrary));//數組轉換成字符串System.out.println(" map = "+ map );} } <!-- user實體的bean對象--><bean id="user" class="com.weihong.domain.User"><property name="userName" value="李白"></property><property name="age" value="26"></property></bean> <!--List集合注入--><bean id="userDao3" class="com.weihong.dao.impl.UserDaoImpl" > <!-- map集合--><property name="map"><map><entry key="K1" value="叮當"></entry><entry key="K2" value-ref="user"></entry></map></property></bean>3.2.5Properties配置注入
property和map類型,有key和value.
public class UserDaoImpl implements UserDao {private String username;private Integer age;private List<Object> userlist;private Set<Object> set; //set集合private Object[] arrary; //數組private Map<String,Object> map; //map集合private Properties properties;public void save(){System.out.println(" list = " + userlist);System.out.println(" set = " + set);System.out.println(" arrary = " + Arrays.toString(arrary));//數組轉換成字符串System.out.println(" map = "+ map );System.out.println(" properties = "+ properties );} } <!-- user實體的bean對象--><bean id="user" class="com.weihong.domain.User"><property name="userName" value="李白"></property><property name="age" value="26"></property></bean> <!--List集合注入--><bean id="userDao3" class="com.weihong.dao.impl.UserDaoImpl" ><!-- properties注入--><property name="properties" ><props><prop key="K1">V1</prop><prop key="K2">V2</prop><prop key="K3">V3</prop></props></property></bean>運行結果:
4.知識小結
-
Spring的重點配置
<bean>標簽:創建對象并放到spring的IOC容器id屬性:在容器中Bean實例的唯一標識,不允許重復class屬性:要實例化的Bean的全限定名scope屬性:Bean的作用范圍,常用是Singleton(默認)和prototype<constructor-arg>標簽:屬性注入 name屬性:屬性名稱value屬性:注入的普通屬性值ref屬性:注入的對象引用值 <property>標簽:屬性注入name屬性:屬性名稱value屬性:注入的普通屬性值ref屬性:注入的對象引用值 <list><set><array><map><props>
總結
以上是生活随笔為你收集整理的05.bean依赖注入的三种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SCN headroom问题解决方案
- 下一篇: 考研英语【作文】评分标准是什么?