Spring的三种注入方式扩展之spring对Bean的管理110402
Posted 张梦源
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring的三种注入方式扩展之spring对Bean的管理110402相关的知识,希望对你有一定的参考价值。
spring对Bean的管理
目录
(2)set方法注入,传递集合(动态创建factory工厂方法间接调用userserviceimpl4)通过bean管理。
(3)set方法注入,传递集合(静态创建factory工厂方法间接调用userserviceimpl4)通过bean管理。
1.创建bean的方式
(1)使用默认构造函数
•
在Spring的配置文件中使用bean标签,配置了id和class属性后,没有配置
其他属性和标签时,采用的就是默认构造函数创建bean对象,此时如果类
中没有默认构造函数,则对象无法创建。
(2)set方法注入,传递集合(动态创建factory工厂方法间接调用userserviceimpl4)通过bean管理。
main方法
public static void main(String[] args) {
// 1. 获取核心容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//4.set方法注入,传递集合(动态创建factory工厂方法间接调用userserviceimpl4)
IUserService service5 = (IUserService) context.getBean("userService5");
service5.queryUser();
// 3.关闭容器(如果不记得关闭容器,最典型的问题就是数据库连接不能释放)
((ClassPathXmlApplicationContext) context).close();
}
applicationContext.xml主配置文件
<bean id="myFactory"
class="com.iflytek.bookmanagesystem.verbFactory">
</bean>
<bean id="userService5" factory-bean="myFactory"
factory-method="createIUserService">
<property name="strings">
<array>
<value>verb 冲冲冲</value>
<value>verb 滚滚滚</value>
<value>verbFactoty事实上</value>
</array>
</property>
</bean>
(3)set方法注入,传递集合(静态创建factory工厂方法间接调用userserviceimpl4)通过bean管理。
main方法
public static void main(String[] args) {
// 1. 获取核心容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//5.set方法注入,传递集合(静态创建factory工厂方法直接调用userserviceimpl4)
IUserService service6 = (IUserService) context.getBean("userService6");
service6.queryUser();
// 3.关闭容器(如果不记得关闭容器,最典型的问题就是数据库连接不能释放)
((ClassPathXmlApplicationContext) context).close();
}
applicationContext.xml主配置文件
<bean id="userService6"
class="com.iflytek.bookmanagesystem.staticFactory"
factory-method="createIUserService">
<property name="strings">
<array>
<value> static冲冲冲</value>
<value> static手术室</value>
<value> staticFactoty方刚刚</value>
</array>
</property>
</bean>
UserServiceImpl4代码
public class UserServiceImpl4 implements IUserService{
private String[] strings;
private List<String> list;
private Set<String> set;
private Map< String, String> map;
private Properties properties;
public void setStrings(String[] strings) {
this.strings = strings;
}
public void setList(List<String> list) {
this.list = list;
}
public void setSet(Set<String> set) {
this.set = set;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public String[] getStrings() {
return strings;
}
public List<String> getList() {
return list;
}
public Set<String> getSet() {
return set;
}
public Map<String, String> getMap() {
return map;
}
public Properties getProperties() {
return properties;
}
@Override
public String toString() {
return "UserServiceImpl4 [strings=" + Arrays.toString(strings) + ", list=" + list + ", set=" + set + ", map="
+ map + ", properties=" + properties + "]";
}
@Override
public String queryUser() {
System.out.println(Arrays.toString(strings));
System.out.println(list);
System.out.println(set);
System.out.println(map);
System.out.println(properties);
return "";
}
}
2.Bean对象的作用范围和生命周期
–
bean标签中的
scope
属性用来指定对象的作用范围。该属性一般取值为:
singleton
、
prototype
。
–
scope="singleton"
,默认值,表示单例对象
•
一个应用只有一个对象的实例。它的作用范围就是整个引用。
•
生命周期:
–
对象出生:当应用加载,创建容器时,对象就被创建了。
–
对象活着:只要容器在,对象一直活着。
–
对象死亡:当应用卸载,销毁容器时,对象就被销毁了。
–
scope="prototype"
,表示多例对象
•
每次访问对象时,都会重新创建对象实例。
•
生命周期:
–
对象出生:当使用对象时,创建新的对象实例。
–
对象活着:只要对象在使用中,就一直活着。
–
对象死亡:当对象长时间不用时,被 java 的垃圾回收器回收了。
扩展的bean工厂(例如在web环境中)可能支持更多的作用域,比如
“request”或“session”。
•
request:作用于Web应用的请求范围
•
session:作用于Web应用的会话范围
•
global-session:作用于集群环境的会话范围(全局会话范围),但不是集
群环境时,就是session
bean标签中还有其他的属性涉及生命周期:
•
init-method:指定类中的初始化方法名称。
•
destroy-method:指定类中销毁方法名称。
以上是关于Spring的三种注入方式扩展之spring对Bean的管理110402的主要内容,如果未能解决你的问题,请参考以下文章