<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
用於設定物件交由Spring 來建立。 預設情況下它呼叫的是類中的無參建構函式,如果沒有無參建構函式則不能建立成功。
基本屬性: id:Bean範例在Spring容器中的唯一標識 class:Bean的全限定名稱
scope:指物件的作用範圍,取值如下:
取值範圍 | 說明 |
---|---|
singleton | 預設值,單例的 |
prototype | 多例的 |
request | WEB 專案中,Spring 建立一個 Bean 的物件,將物件存入到 request 域中 |
session | WEB 專案中,Spring 建立一個 Bean 的物件,將物件存入到 session 域中 |
global session | WEB 專案中,應用在 Portlet 環境,如果沒有 Portlet 環境那麼globalSession 相當於 session |
1)當scope的取值為singleton時
Bean的範例化個數:1個
Bean的範例化時機:當Spring核心檔案被載入時,範例化設定的Bean範例
Bean的生命週期:
物件建立:當應用載入,建立容器時,物件就被建立了
物件執行:只要容器在,物件一直活著
物件銷燬:當應用解除安裝,銷燬容器時,物件就被銷燬了
2)當scope的取值為prototype時
Bean的範例化個數:多個
Bean的範例化時機:當呼叫getBean()方法時範例化Bean
物件建立:當使用物件時,建立新的物件範例
物件執行:只要物件在使用中,就一直活著
物件銷燬:當物件長時間不用時,被 Java 的垃圾回收器回收了
init-method:指定類中的初始化方法名稱
destroy-method:指定類中銷燬方法名稱
①建立 UserService,UserService 內部在呼叫 UserDao的save() 方法
public class UserServiceImpl implements UserService { @Override public void save() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save(); } }
②將 UserServiceImpl 的建立權交給 Spring
<bean id="userService" class="com.zjq.service.impl.UserServiceImpl"/>
③從 Spring 容器中獲得 UserService 進行操作
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService) applicationContext.getBean("userService"); userService.save();
依賴注入(Dependency Injection):它是 Spring 框架核心 IOC 的具體實現。
在編寫程式時,通過控制反轉,把物件的建立交給了 Spring,但是程式碼中不可能出現沒有依賴的情況。
IOC 解耦只是降低他們的依賴關係,但不會消除。例如:業務層仍會呼叫持久層的方法。
那這種業務層和持久層的依賴關係,在使用 Spring 之後,就讓 Spring 來維護了。
簡單的說,就是坐等框架把持久層物件傳入業務層,而不用我們自己去獲取
①構造方法
建立有參構造
public class UserServiceImpl implements UserService { @Override public void save() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save(); } }
設定Spring容器呼叫有參構造時進行注入
<bean id="userDao" class="com.zjq.dao.impl.UserDaoImpl"/> <bean id="userService" class="com.zjq.service.impl.UserServiceImpl"> <constructor-arg name="userDao" ref="userDao"></constructor-arg> </bean>
②set方法
在UserServiceImpl中新增setUserDao方法
public class UserServiceImpl implements UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void save() { userDao.save(); } }
設定Spring容器呼叫set方法進行注入
<bean id="userDao" class="com.zjq.dao.impl.UserDaoImpl"/> <bean id="userService" class="com.zjq.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"/> </bean>
set方法:P名稱空間注入
P名稱空間注入本質也是set方法注入,但比起上述的set方法注入更加方便,主要體現在組態檔中,如下:
首先,需要引入P名稱空間:
xmlns:p="http://www.springframework.org/schema/p"
其次,需要修改注入方式
<bean id="userService" class="com.zjq.service.impl.UserServiceImpl" p:userDao- ref="userDao"/>
上面的操作,都是注入的參照Bean,除了物件的參照可以注入,普通資料型別,集合等都可以在容器中進行注入。
注入資料的三種資料型別
其中參照資料型別,此處就不再贅述了,之前的操作都是對UserDao物件的參照進行注入的,下面將以set方法注入為例,演示普通資料型別和集合資料型別的注入。
(1)普通資料型別的注入
public class UserDaoImpl implements UserDao { private String company; private int age; public void setCompany(String company) { this.company = company; } public void setAge(int age) { this.age = age; } public void save() { System.out.println(company+"==="+age); System.out.println("UserDao save method running...."); } }
<bean id="userDao" class="com.zjq.dao.impl.UserDaoImpl"> <property name="company" value="huawei"></property> <property name="age" value="15"></property> </bean>
(2)集合資料型別(List)的注入
public class UserDaoImpl implements UserDao { private List<String> strList; public void setStrList(List<String> strList) { this.strList = strList; } public void save() { System.out.println(strList); System.out.println("UserDao save method running...."); } }
<bean id="userDao" class="com.zjq.dao.impl.UserDaoImpl"> <property name="strList"> <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> </list> </property> </bean>
(3)集合資料型別(List)的注入
public class UserDaoImpl implements UserDao { private List<User> userList; public void setUserList(List<User> userList) { this.userList = userList; } public void save() { System.out.println(userList); System.out.println("UserDao save method running...."); } }
<bean id="u1" class="com.zjq.domain.User"/> <bean id="u2" class="com.zjq.domain.User"/> <bean id="userDao" class="com.zjq.dao.impl.UserDaoImpl"> <property name="userList"> <list> <bean class="com.zjq.domain.User"/> <bean class="com.zjq.domain.User"/> <ref bean="u1"/> <ref bean="u2"/> </list> </property> </bean>
(4)集合資料型別( Map<String,User> )的注入
public class UserDaoImpl implements UserDao { private Map<String,User> userMap; public void setUserMap(Map<String, User> userMap) { this.userMap = userMap; } public void save() { System.out.println(userMap); System.out.println("UserDao save method running...."); } }
<bean id="u1" class="com.zjq.domain.User"/> <bean id="u2" class="com.zjq.domain.User"/> <bean id="userDao" class="com.zjq.dao.impl.UserDaoImpl"> <property name="userMap"> <map> <entry key="user1" value-ref="u1"/> <entry key="user2" value-ref="u2"/> </map> </property> </bean>
(5)集合資料型別(Properties)的注入
public class UserDaoImpl implements UserDao { private Properties properties; public void setProperties(Properties properties) { this.properties = properties; } public void save() { System.out.println(properties); System.out.println("UserDao save method running...."); } }
<bean id="userDao" class="com.zjq.dao.impl.UserDaoImpl"> <property name="properties"> <props> <prop key="p1">aaa</prop> <prop key="p2">bbb</prop> <prop key="p3">ccc</prop> </props> </property> </bean>
實際開發中,Spring的設定內容非常多,這就導致Spring設定很繁雜且體積很大,所以,可以將部分設定拆解到其他組態檔中,而在Spring主組態檔通過import標籤進行載入
<import resource="applicationContext-xxx.xml"/>
到此這篇關於Spring入門到精通之Bean標籤詳解的文章就介紹到這了,更多相關Spring Bean標籤內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45