日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

05.bean依赖注入的三种方式

發(fā)布時間:2024/3/24 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 05.bean依赖注入的三种方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

05.bean依賴注入的三種方式

1.概述

依賴注入 DI(Dependency Injection):它是 Spring 框架核心 IOC 的具體實現(xiàn)。

在編寫程序時,通過控制反轉,把對象的創(chuàng)建交給了 Spring,但是代碼中不可能出現(xiàn)沒有依賴的情況。IOC 解耦只是降低他們的依賴關系,但不會消除。例如:業(yè)務層仍會調用持久層的方法。

那這種業(yè)務層和持久層的依賴關系,在使用 Spring 之后,就讓 Spring 來維護了。簡單的說,就是通過框架把持久層對象傳入業(yè)務層,而不用我們自己去獲取。

2.bean依賴注入方式

2.1 構造方法

  • 在UserServiceImpl中創(chuàng)建有參構造
  • public class UserServiceImp implements UserService {private UserDao userDao;public UserServiceImp(UserDao userDao){this.userDao = userDao;}@Overridepublic void save() {userDao.save();} }

    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對象的參數(shù)ref:表示引用的是bean對象id為UserDao的對象--></bean>
    • 上面配置等價于

    2.2 set方法

  • 在UserServiceImpl中創(chuàng)建set方法
  • public class UserServiceImp implements UserService {private UserDao userDao;public void setUserDao(UserDao userDao){this.userDao = userDao;}@Overridepublic void save() {userDao.save();}
  • 配置Spring容器調用set方法進行注入
  • <bean id="userDao" class="com.weihong.dao.impl.UserDaoImpl" scope="prototype"></bean><bean id="userService" class="com.weihong.service.serviceImp.UserServiceImp" ><!-- name:表示UserServiceImpl里UserDao對象的參數(shù)ref:表示引用的是bean對象id為UserDao的對象(引用對象的注入)--><property name="userDao" ref="userDao"></property></bean>

    等價于以下代碼:

    2.3 P命名空間注入

    P命名空間注入本質也是set方法注入,但比起上述的set方法注入更加方便,主要體現(xiàn)在配置文件中,如下:

  • 定義約束頭,引入p命名空間:
  • xmlns:p="http://www.springframework.org/schema/p"
  • 修改注入方式:
  • <bean id="userDao" class="com.weihong.dao.impl.UserDaoImpl" scope="prototype"></bean><bean id="userService" class="com.weihong.service.serviceImp.UserServiceImp" p:userDao-ref="userDao"></bean> </bean>

    3.bean依賴注入的數(shù)據(jù)類型

    上面的注入都是注入Bean對象,除了對象的引用注入,普通數(shù)據(jù)類型和集合都可以在容器中進行注入。

    注入數(shù)據(jù)的三種數(shù)據(jù)類型

  • 普通數(shù)據(jù)類型
  • 引用數(shù)據(jù)類型
  • 集合數(shù)據(jù)類型
  • 其中引用數(shù)據(jù)類型,上述已經(jīng)介紹過了,下面將以set方法注入為例,演示普通數(shù)據(jù)類型和集合數(shù)據(jù)類型的注入。

    3.1注入普通數(shù)據(jù)類型

  • 普通數(shù)據(jù)類型
  • public class UserDaoImpl implements UserDao {private String username;private Integer age;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("age="+age+" username=" +username);} }
  • 配置文件
  • <bean id="userDao2" class="com.weihong.dao.impl.UserDaoImpl" > <!-- name:表示對象屬性value:表示為對象屬性賦值ref:表示引用數(shù)據(jù)對象的注入 --><property name="username" value="張三"></property><property name="age" value="17" ></property></bean>
  • 測試結果
  • 3.2注入集合數(shù)據(jù)類型

    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集合第一個值為基本數(shù)據(jù)類型ref:表示引用的數(shù)據(jù)對象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集合第一個值為基本數(shù)據(jù)類型ref:表示引用的數(shù)據(jù)對象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數(shù)組注入

    public class UserDaoImpl implements UserDao {private String username;private Integer age;private List<Object> userlist;private Set<Object> set; //set集合private Object[] arrary; //數(shù)組public void save(){System.out.println(" list = " + userlist);System.out.println(" set = " + set);System.out.println(" arrary = " + Arrays.toString(arrary));//數(shù)組轉換成字符串} } <!-- 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" > <!-- 數(shù)組注入--><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; //數(shù)組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));//數(shù)組轉換成字符串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; //數(shù)組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));//數(shù)組轉換成字符串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>標簽:創(chuàng)建對象并放到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依赖注入的三种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。