-
spring通过xml实现自定义作用域(自定义双例模式作用域)
SimpleThreadScope:Spring内置作用域。
编写自定义作用域:
步骤1:实现Scope接口(org.springframework.beans.factory.config),主要关注实现的get方法和remove方法。
get方法:按照name参数,按照我们自己定义的规则,去返回一个Bean,如果我们定义的规则里,Bean不存在,那么将通过objectFactory去创建一个Bean。
双例模式:一个bean的Id对应两个实例,实现双例模式,需要两个Map集合,Map<String,Object> map1=new HashMap<String,Object>();Map<String,Object> map2=new HashMap<String,Object>();。
查看全部 -
springweb上下文环境
request作用域:每次执行request请求调用到bean时会重新实例化bean对象
session作用域:请求session重置后会重新实例化
application作用域:应用重启后会重新实例化
查看全部 -
通过Spring的xml文件配置Bean作用域:(Spring默认作用域是Singleton)
1、Singleton作用域(单例模式:通过Spring容器实现单例模式,具有局限性:保证在一个Spring上下文(ApplicationContext)是单例模式,多个AppliactionContext单例模式就失效了。
定义:如果一个<bean>的作用域为Singleton,则该<bean>只会被实例化一次,只有一个Bean会被创建。(每次向Spring上下文(ApplicationContext生命周期存活)请求这个实例时,Spring都会返回同一个实例)。
2、prototype作用域(多例模式)
定义:如果一个<bean>的作用域为prototype,则该<bean>会被实例化多次,有多个Bean会被创建(每次向Spring上下文请求该Bean都会new一个新的实例)。
查看全部 -
第一种:通过构造方法注入Bean
#<bean>标签管理class对象。
#bean的构造方法参数标签 constructor-arg。
#index 表示构造方法的第几个参数。
#name 表示构造方法的参数名。
#type 表示对应的参数类型。
#value 表示为参数提供赋值,一般用于String等简单常用对象。
#ref 表示为参数提供赋值,一般是复杂点的依赖其它 class的对象(取bean的id)。
注意:只要通过index、name、type的组合明确表示出构造函数的那一个参数即可,
不一定全用,只用index也可以。
<bean class="com.imooc.spring.ioc.class06.Bean">
<constructor-arg index="0" name="anotherBean"
type="com.imooc.spring.ioc.class06.AnotherBean">
</constructor-arg>
</bean>
通过构造方法注入Bean,输出结果:
成功的给属性赋值。
查看全部 -
1、通过构造方法实例化Bean。
步骤1:创建要实例化的类,并提供无参构造方法。
public class Bean {
public Bean(){
System.out.println("Bean被创建了");
}
步骤2:spring.xml中配置
<bean id="bean的唯一标识" class="要实例化bean的路径"></bean>
测试:ApplicationContext context=new ClassPathXmlApplicationContext(spring.xml的路径);
Bean bean=context.getBean("bean",Bean.class);
System.out.println(bean);
2、通过静态方法实例化Bean。(通过Bean2的工厂的静态方法实例化Bean)
步骤1:创建Bean2的工厂Bean2Factory类以及Bean2类,并且提供一个静态、返回值类型为Bean2的方法,返回new Bean2()。
public class Bean2Factory {
public static Bean2 getBean2(){
return new Bean2();
}
}
public class Bean2 {
public Bean2(){
System.out.println("Bean2被创建了。");
}
步骤2:配置Spring.xml
<bean class="Bean2工厂的路径" factory-method="Bean2工厂的静态方法名" id="Bean2工厂的唯一标识"></bean>
测试:
ApplicationContext context=new ClassPathXmlApplicationContext("spring-ioc2.xml");
Bean2 bean=context.getBean("bean2factoryId",Bean2.class);
System.out.println(bean);
3、通过实例方法实例化Bean。(通过Bean2的工厂的实例方法实例化Bean)
步骤1:创建Bean3的工厂Bean3Factory类以及Bean3类,并且提供一个返回值类型为Bean3的方法,方法返回new Bean3()。
public class Bean3Factory {
public Bean3 getBean3(){
return new Bean3();
}
}
public class Bean3 {
public Bean3(){
System.out.println("Bean3被创建了。");
}
}
步骤2:配置Spring.xml
<bean class="main.java.com.imooc2.Bean3Factory" id="bean3Factory"></bean>
<bean class="main.java.com.imooc2.Bean3" factory-bean="bean3Factory" factory-method="getBean3" id="bean3"></bean>
给bean取别名:有类Bean1,并且通过bean标签实例化Bean1,给Bean1的实例取多个名字。
例如:方式一:bean标签里添加name属性
<bean id="bean" class="main.java.com.imooc1.Bean" name="bean1_1,bean1_2"></bean>
方式二:添加<alias>标签
<bean id="bean" class="main.java.com.imooc2.Bean1" name="bean1_1,bean1_2"></bean>
<alias name="bean" alias="bean1_3"/><!-- alias只支持一个别名 -->
查看全部 -
org.springframework.beans.factory.config
查看全部 -
自定义的IoC容器测试代码:
IoC创造类和功能约定:
2. 反射方法实例化bean.
测试:
回顾总结:
好处:
查看全部 -
第一种:通过构造方法注入Bean
#<bean>标签管理class对象。
#bean的构造方法参数标签 constructor-arg。
#index 表示构造方法的第几个参数。
#name 表示构造方法的参数名。
#type 表示对应的参数类型。
#value 表示为参数提供赋值,一般用于String等简单常用对象。
#ref 表示为参数提供赋值,一般是复杂点的依赖其它 class的对象(取bean的id)。
注意:只要通过index、name、type的组合明确表示出构造函数的那一个参数即可,
不一定全用,只用index也可以。
<bean class="com.imooc.spring.ioc.class06.Bean">
<constructor-arg index="0" name="anotherBean"
type="com.imooc.spring.ioc.class06.AnotherBean">
</constructor-arg>
</bean>
通过构造方法注入Bean,输出结果:
成功的给属性赋值。
总结:
第一种:构造方法注入bean
第二种:通过set方法注入Bean
第三种:集合类型Bean注入
List和Set
Map和Propertyes
第四种:注入null值
第五点:注入内部Bean
查看全部 -
实例化Bean的方法总结:
Spring 实例化Bean的方法:
Bean的别名
别名输出的都是同一个Bean实例
查看全部 -
什么是IoC
英文全程:Inversion of Control
为什么要使用IoC
查看全部 -
课程内容:IoC部分
了解xml配置的繁琐,才能体会使用注解的方便。
课程目的:
查看全部 -
Spring入门课程目录,分三大部分
查看全部 -
Java Web发展的六个阶段
查看全部 -
Java Web发展史(一)
查看全部 -
Java Web发展史
查看全部
举报