spring 配置檔案 --bean
bean標配的基本配置
id:Bean例項在Spring容器中的唯一標識
class Bean的全限定名
scope
1.當scope的取值為singleton時
Bean的例項化個數: 1個
Bean的例項化時機:當Spri ng核心檔案被載入時,例項化配置的Bean例項
Bean的生命週期:
物件建立:當應用載入,建立容器時,物件就被建立了
物件執行:只要容器在,物件一直活著
物件銷燬:當應用解除安裝,銷燬容器時,物件就被銷燬了
2.當scope的取值 為prototype時
Bean的例項化個數:多個
Bean的例項化時機:當呼叫getBean()方法時例項化Bean
Bean的生命週期:
物件建立:當使用物件時,建立新的物件例項
物件執行:只要物件在使用中,就一直活著
物件銷燬:當物件長時間不用時,被Java 的垃圾回收器回收了
* init-method:指定類中的初始化方法名稱
* destroy-method:指定類中銷燬方法名稱
<bean id="userDao" class="com.ithema.dao.impl.UserDaoimpl" init-method="init" destroy-method="destory"></bean>
例項化bean物件
1,提供無參構造方法(預設)
2,靜態工廠例項化bean
1、建立工廠類
public class BeanDaoFactory {
public static BeanDao getBeanDao(){
System.out.println("bean dao factory running ...");
return new BeanDaoImpl();
}
}
2、配置bean
<bean id="beanDao" class="com.ithema.dao.impl.BeanDaoFactory" factory-method="getBeanDao" />
3、例項工廠例項化bean
1、定義例項工廠
public class BeanDaoFactory {
public BeanDao getBeanDao(){
System.out.println("bean dao factory running ...");
return new BeanDaoImpl();
}
}
2、配置bean
<!-- 1.配置例項工廠物件 -->
<bean id="beanFactory" class="factory.BeanDaoFactory" />
<!-- 2.配置beanDao物件 -->
<bean id="beanDao" factory-bean="beanFactory" factory-method="getBeanDao" />
測試程式碼
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BeanDao beanDao = (BeanDao) context.getBean("beanDao");
beanDao.save();
}
}
bean依賴注入的三種方式
set方法
1.set方法
public class UserServiceImp implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
2.配置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物件的引數
ref:表示引用的是bean物件id為UserDao的物件(引用物件的注入)
-->
<property name="userDao" ref="userDao"></property>
</bean>
P名稱空間注入
P名稱空間注入本質也是set方法注入,但比起上述的set方法注入更加方便,主要體現在配置檔案中,如下:
1.定義約束頭,引入p名稱空間:
xmlns:p="http://www.springframework.org/schema/p"
2.修改注入方式:
<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>
2.1 構造方法
1.在UserServiceImpl中建立有參構造
public class UserServiceImp implements UserService {
private UserDao userDao;
public UserServiceImp(UserDao userDao){
this.userDao = userDao;
}
@Override
public 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物件的引數
ref:表示引用的是bean物件id為UserDao的物件
-->
</bean>
3.1注入普通資料型別
1.普通資料型別
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);
}
}
2.配置檔案
<bean id="userDao2" class="com.weihong.dao.impl.UserDaoImpl" >
<!-- name:表示物件屬性
value:表示為物件屬性賦值
ref:表示引用資料物件的注入
-->
<property name="username" value="張三"></property>
<property name="age" value="17" ></property>
</bean>
3.2注入集合資料型別
使用set注入
在UserDaoimpl新增集合
private List<String> strList;
private Map<String, User> userMap;
private Properties properties;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
2.配置檔案
<bean id="user1" class="com.ithema.domain.User" >
<property name="name" value="tom"></property>
<property name="addr" value="bai"></property>
</bean>
<bean id="user2" class="com.ithema.domain.User" >
<property name="name" value="lucy"></property>
<property name="addr" value="cq"></property>
</bean>
<bean id="userDao" class="com.ithema.dao.impl.UserDaoimpl" >
<property name="strList">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<property name="properties">
<props>
<prop key="k1">v1</prop>
<prop key="k2">v2</prop>
<prop key="k3">v3</prop>
</props>
</property>
<property name="userMap">
<map>
<entry key="u1" value-ref="user1"></entry>
<entry key="u2" value-ref="user2"></entry>
</map>
</property>
</bean>
4.引入其他的配置檔案
<import resource="applicationContext-user .xml"></import>
- 【演算法篇】刷了兩道大廠面試題,含淚 ”重學陣列“
- 2022 開源軟體安全狀況報告:超 41% 的企業對開源安全沒有足夠的信心
- JavaScript中async和await的使用以及佇列問題
- Flex & Bison 開始
- Obsidian基礎教程
- 分享自己平時使用的socket多客戶端通訊的程式碼技術點和軟體使用
- iNeuOS工業網際網路作業系統,增加2154個檢視建模(WEB組態)行業向量圖元、大屏背景及相關圖元
- 多臺雲伺服器的 Kubernetes 叢集搭建
- Elasticsearch學習系列四(聚合搜尋)
- 關於swiper外掛在vue2的使用
- 使用 Abp.Zero 搭建第三方登入模組(一):原理篇
- LVGL庫入門教程 - 顏色和影象
- Node.js精進(4)——事件觸發器
- 物聯網?快來看 Arduino 上雲啦
- SpringBoot JWT Redis 開源知識社群系統
- CVPR2022 | 可精簡域適應
- Spring框架系列(3) - 深入淺出Spring核心之控制反轉(IOC)
- 面試突擊59:一個表中可以有多個自增列嗎?
- CVPR2022 | 弱監督多標籤分類中的損失問題
- JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文帶你釐清箇中曲直,給你個選擇SpringDataJPA的...