赞
踩
spring bean的注入大致分为两类:XML配置 与 注解方式
(1)XML配置:set注入、构造函数注入、P标签、静态工厂方法、实例工厂方法;
(2)注解方式: @Autowired、@Resource、@Qualifier
Spring注入的数据类型:
(1)常见的引用类型,包装类、String、Date等
(2)自定义bean类型
(3)集合类型
用于给List结构集合注入的标签:
list array set
用于个Map结构集合注入的标签:
map props
结构相同,标签可以互换
<bean id="book" class="com.tsj.bean.Book">
<!--使用property完成属性注入,name:类里面属性名称,value:向属性注入的值 -->
<property name="bookName" value="平凡世界"/>
<property name="bookAuthor" value="路遥"/>
</bean>
book bean:
public class Book {
private String bookName;
private String bookAuthor;
public Book() {
}
public Book(String bookName, String bookAuthor) {
this.bookName = bookName;
this.bookAuthor = bookAuthor;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookAuthor() {
return bookAuthor;
}
public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
}
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + '\'' +
", bookAuthor='" + bookAuthor + '\'' +
'}';
}
}
<bean id="bookOrders" class="com.tsj.bean.BookOrders">
<constructor-arg name="orderName" value="畅销书top1订单"/>
<constructor-arg name="orderPrice" value="56"/>
</bean>
bookOrders bean:
/**
* 订单
*/
public class BookOrders {
//订单名称
private String orderName;
//订单价格
private double orderPrice;
public BookOrders() {
}
public BookOrders(String orderName, double orderPrice) {
this.orderName = orderName;
this.orderPrice = orderPrice;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public double getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(double orderPrice) {
this.orderPrice = orderPrice;
}
@Override
public String toString() {
return "Orders{" +
"orderName='" + orderName + '\'' +
", orderPrice=" + orderPrice +
'}';
}
}
记得引入 xmlns:p=“http://www.springframework.org/schema/p”
<bean id="bookShop" class="com.tsj.bean.BookShop"
p:shopName="中华书局旗舰店" p:shopNo="1245" p:shopAddr="北京朝阳"/>
bookShop bean:
public class BookShop {
private String shopName;
private String shopNo;
private String shopAddr;
public BookShop() {
}
public BookShop(String shopName, String shopNo,String shopAddr) {
this.shopName = shopName;
this.shopNo = shopNo;
this.shopAddr = shopAddr;
}
public String getShopName() {
return shopName;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
public String getShopNo() {
return shopNo;
}
public void setShopNo(String shopNo) {
this.shopNo = shopNo;
}
public String getShopAddr() {
return shopAddr;
}
public void setShopAddr(String shopAddr) {
this.shopAddr = shopAddr;
}
@Override
public String toString() {
return "BookShop{" +
"shopName='" + shopName + '\'' +
", shopNo='" + shopNo + '\'' +
", shopAddr='" + shopAddr + '\'' +
'}';
}
}
使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
bean id="publisherStatic" class="com.tsj.bean.PublisherFactory"
factory-method="getPublisherByStaticFactory"/>
PublisherFactory bean:
public class PublisherFactory {
/**
* 静态工厂,返回一个PublishInfo的实例对象
*/
public static PublishInfo getPublisherByStaticFactory() {
return new PublishInfo("中国文明", "0-415-15591-6");
}
/**
* 实例工厂,返回一个PublishInfo的实例对象
*/
public PublishInfo getPublisherByInstanceFactory() {
return new PublishInfo("希腊文明", "0-415-15612-2");
}
}
PublishInfo bean:
public class PublishInfo {
//出版社名称
private String publisher;
//国际标准图书编码
private String ISBN;
public PublishInfo() {
}
public PublishInfo(String publisher, String ISBN) {
this.publisher = publisher;
this.ISBN = ISBN;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public String getISBN() {
return ISBN;
}
public void setISBN(String ISBN) {
this.ISBN = ISBN;
}
@Override
public String toString() {
return "Publisher{" +
"publisher='" + publisher + '\'' +
", ISBN='" + ISBN + '\'' +
'}';
}
}
使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器中)
<bean id="publisherInstanceFactory" class="com.tsj.bean.publisherFactory"/>
<bean id="publisherInstance" factory-bean="publisherInstanceFactory"
factory-method="getPublisherByInstanceFactory"/>
<!-- Spring注入的数据:
(1) 包装类型/String、Date
(2) bean类型
(3)复杂类型的注入/集合类型的注入
用于给List结构集合注入的标签:
list array set
用于个Map结构集合注入的标签:
map props
结构相同,标签可以互换
-->
<!-- 配置一个日期对象 -->
<bean id="now" class="java.util.Date"/>
<bean id="accountDIBean" class="com.tsj.bean.AccountDIBean">
<!--包装类和Strig Date-->
<property name="name" value="泰兰特"/>
<property name="age" value="43"/>
<property name="birthday" ref="now"/>
<!--引用类型-->
<!--通过ref来进行引用 bean-->
<property name="book" ref="book"/>
<!-- 直接配置内部 bean,不用ref就配置全路径 -->
<property name="bookOrders">
<bean class="com.tsj.bean.BookOrders">
<constructor-arg name="orderName" value="格雷厄姆格林的书单"/>
<constructor-arg name="orderPrice" value="66"/>
</bean>
</property>
<!--配置set属性-->
<property name="mySets">
<set>
<value>《云边有个小卖铺》</value>
<value>《The Bronze Horseman》</value>
<value>《人性的因素》</value>
<value>《人性的因素》</value>
</set>
</property>
<!--配置array属性-->
<property name="myArrays">
<array>
<value>《文化苦旅》</value>
<value>《山河之书》</value>
<value>《泥步修行》</value>
</array>
</property>
<!--配置list属性-->
<property name="myLists">
<list>
<value>破惑</value>
<value>问道</value>
<value>安顿</value>
</list>
</property>
<!--配置props属性-->
<property name="myProps">
<props>
<prop key="书名:">相约星期二</prop>
<prop key="作者:">阿尔博姆</prop>
</props>
</property>
<!--配置map属性-->
<property name="myMaps">
<map>
<entry key="master" value="oss1"/>
<entry key="slave">
<value>oss-2</value>
</entry>
</map>
</property>
</bean>
<?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:p="http://www.springframework.org/schema/p"
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-3.0.xsd
">
<!-- spring对bean的管理细节:1、创建bean 2、bean对象的作用范围 3、销毁 4、bean对象的生命周期
1、创建bean的方式(5种):
(1)在spring的配置文件中使用bean标签,配置id和class之后,且没有其他属性和标签时,
采用的就是默认构造函数创建bean对象.
(2)构造函数
(3)P标签注入
(4)使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器中)
(5)使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
-->
<!-- 1.set方法注入 (xml常用的方式)
涉及的标签:property
出现的位置:bean标签的内部
标签的属性
name:用于指定注入时所调用的set方法名称
value:用于提供基本类型和String类型的数据
ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的bean对象
优势:
创建对象时没有明确的限制,可以直接使用默认构造函数
弊端:
如果有某个成员必须有值,则获取对象是有可能set方法没有执行。
-->
<bean id="book" class="com.tsj.bean.Book">
<!--使用property完成属性注入,name:类里面属性名称,value:向属性注入的值 -->
<property name="bookName" value="平凡世界"/>
<property name="bookAuthor" value="路遥"/>
</bean>
<!--2.构造函数注入:
使用的标签:constructor-arg
标签出现的位置:bean标签的内部
标签中的属性
type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从0开始
name:用于指定给构造函数中指定名称的参数赋值 常用的
=============以上三个用于指定给构造函数中哪个参数赋值===============================
value:用于提供基本类型和String类型的数据
ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的bean对象
优势:
在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功。
弊端:
改变了bean对象的实例化方式,使我们在创建对象时,如果用不到这些数据,也必须提供。
-->
<bean id="bookOrders" class="com.tsj.bean.BookOrders">
<constructor-arg name="orderName" value="畅销书top1订单"/>
<constructor-arg name="orderPrice" value="56"/>
</bean>
<!--3. p标签注入
记得引入 xmlns:p="http://www.springframework.org/schema/p"
-->
<bean id="bookShop" class="com.tsj.bean.BookShop"
p:shopName="中华书局旗舰店" p:shopNo="1245" p:shopAddr="北京朝阳"/>
<!--4. 静态工厂注入
-->
<bean id="publisherStatic" class="com.tsj.bean.publisherFactory"
factory-method="getPublisherByStaticFactory"/>
<!--5. 实例工厂注入
-->
<bean id="publisherInstanceFactory" class="com.tsj.bean.publisherFactory"/>
<bean id="publisherInstance" factory-bean="publisherInstanceFactory"
factory-method="getPublisherByInstanceFactory"/>
<!-- Spring注入的数据分:三类
(1) 包装类型和String、Date
(2) 其他bean类型(在配置文件中或者注解配置过的bean)
(3)复杂类型的注入/集合类型的注入
用于给List结构集合注入的标签:
list array set
用于个Map结构集合注入的标签:
map props
结构相同,标签可以互换
-->
<!-- 配置一个日期对象 -->
<bean id="now" class="java.util.Date"/>
<bean id="accountDIBean" class="com.tsj.bean.AccountDIBean">
<!--包装类和Strig Date-->
<property name="name" value="泰兰特"/>
<property name="age" value="43"/>
<property name="birthday" ref="now"/>
<!--引用类型-->
<!--通过ref来进行引用 bean-->
<property name="book" ref="book"/>
<!-- 直接配置内部 bean,不用ref就配置全路径 -->
<property name="bookOrders">
<bean class="com.tsj.bean.BookOrders">
<constructor-arg name="orderName" value="格雷厄姆格林的书单"/>
<constructor-arg name="orderPrice" value="66"/>
</bean>
</property>
<!--配置set属性-->
<property name="mySets">
<set>
<value>《云边有个小卖铺》</value>
<value>《The Bronze Horseman》</value>
<value>《人性的因素》</value>
<value>《人性的因素》</value>
</set>
</property>
<!--配置array属性-->
<property name="myArrays">
<array>
<value>《文化苦旅》</value>
<value>《山河之书》</value>
<value>《泥步修行》</value>
</array>
</property>
<!--配置list属性-->
<property name="myLists">
<list>
<value>破惑</value>
<value>问道</value>
<value>安顿</value>
</list>
</property>
<!--配置props属性-->
<property name="myProps">
<props>
<prop key="书名:">相约星期二</prop>
<prop key="作者:">阿尔博姆</prop>
</props>
</property>
<!--配置map属性-->
<property name="myMaps">
<map>
<entry key="master" value="oss1"/>
<entry key="slave">
<value>oss-2</value>
</entry>
</map>
</property>
</bean>
</beans>
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("/spring/applicationContextBean.xml");
/**
* 构造函数
*/
System.out.println("===构造函数注入==================================");
BookOrders order = ac.getBean("bookOrders", BookOrders.class);
System.out.println(order.toString());
/**
* p空间注入
*/
System.out.println("===p空间注入注入==================================");
BookShop bookShop = ac.getBean("bookShop", BookShop.class);
System.out.println(bookShop.toString());
/**
* 静态工厂注入
*/
System.out.println("===静态工厂注入==================================");
PublishInfo publishInfo1 = ac.getBean("publisherStatic", PublishInfo.class);
System.out.println(publishInfo1.toString());
/**
* 实例工厂注入
*/
System.out.println("===实例工厂注入==================================");
PublishInfo publishInfo2 = ac.getBean("publisherInstance", PublishInfo.class);
System.out.println(publishInfo2.toString());
/**
* set注入
*/
System.out.println("===set注入==================================");
Book book = ac.getBean("book", Book.class);
System.out.println(book.toString());
System.out.println(book.getBookName());
System.out.println("===set注入 类型 ==================================");
AccountDIBean accountDIBean = ac.getBean("accountDIBean", AccountDIBean.class);
accountDIBean.saveAccount();
System.out.println(accountDIBean.toString());
}
===构造函数注入==================================
Orders{orderName='畅销书top1订单', orderPrice=56.0}
===p空间注入注入==================================
BookShop{shopName='中华书局旗舰店', shopNo='1245', shopAddr='北京朝阳'}
===静态工厂注入==================================
Publisher{publisher='中国文明', ISBN='0-415-15591-6'}
===实例工厂注入==================================
Publisher{publisher='希腊文明', ISBN='0-415-15612-2'}
===set注入==================================
Book{bookName='平凡世界', bookAuthor='路遥'}
平凡世界
===set注入 类型 ==================================
String类型:泰兰特
integer类型:43
Date类型:Sun Oct 02 22:42:13 CST 2022
Bean 类型Book{bookName='平凡世界', bookAuthor='路遥'}
Bean 类型Orders{orderName='格雷厄姆格林的书单', orderPrice=66.0}
String类型:[《文化苦旅》, 《山河之书》, 《泥步修行》]
List类型:[破惑, 问道, 安顿]
Set类型:[《云边有个小卖铺》, 《The Bronze Horseman》, 《人性的因素》]
Map类型:{master=oss1, slave=oss-2}
Properties类型:{书名:=相约星期二, 作者:=阿尔博姆}
AccountDIBean{name='泰兰特', age=43, birthday=Sun Oct 02 22:42:13 CST 2022, myArrays=[《文化苦旅》, 《山河之书》, 《泥步修行》], myLists=[破惑, 问道, 安顿], mySets=[《云边有个小卖铺》, 《The Bronze Horseman》, 《人性的因素》], myMaps={master=oss1, slave=oss-2}, myProps={书名:=相约星期二, 作者:=阿尔博姆}, book=Book{bookName='平凡世界', bookAuthor='路遥'}, bookOrders=Orders{orderName='格雷厄姆格林的书单', orderPrice=66.0}}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。