IOC操作Bean管理2
------------恢复内容开始------------
Spring有两种类型的Bean,一种普通类型的Bean另外一种工厂Bean(Factory Bean)
二者的区别在于这句
<bean id="book" class="com.atguigu.collectiontype.Book">,普通XM中bean在class里定义什么(Book类型)类型的bean,则在
测试引用得到时(Book)时就用什么类型的bean Book book=contest.getBean("book",Book.class);
工厂bean,定义类型和返回类型可以不一致
工厂bean方法:第一步创建类,让这个类作为工厂bean,实现接口FactoryBean
第二步:实现接口的方法,在实现方法中定义返回的bean类型
Bean的作用域的描述
在Spring里,可以设置创建的bean实例时,是单实例还是多实例
在Spring里,在默认情况下,创建的bean是单实例
如何设置多实例?
在创建对象的bean标签里有属性设置用于设置单实例和多实例(scope=“(默认值singleton、多实例prototype)、request、session”)!!!!
singleton与prototype区别:singleton是单实例、prototype是多实例
scope值是singleton加载配置文件时就会创建单实例对象ApplicationContext contest=new ClassPathXmlApplicationContext("book1.xml");
scope值是prototype,是在调用getBean方法时创建多实例对象
关于Bean生命周期的理解(Bean管理)
从对象创建到对象销毁过程:
(1)通过构造器创建bean实例(无参构造)
(2)为bean的属性设置值和对其他bean引用(调用set方法)
(3)调用bean的初始化方法(需要进行初始化的方法配置在xml文件创建对象时后面加init-Method="")
(4)获取bean,获取对象
(5)当容器关闭,调用bean的销毁方法(需要配置销毁的方法)
演示bean的生命周期:
public class Orders {
private String oname;
//这是无参构造
public Orders() {
System.out.println("(1)通过构造器创建bean实例(无参构造)");
}
public String getOname() {
return oname;
}
public void setOname(String oname) {
this.oname = oname;
System.out.println("(2)为bean的属性设置值和对其他bean引用(调用set方法)");
}
//在类中创建执行的初始化方法
public void initMethod()
{
System.out.println("(3)调用bean的初始化方法(需要进行初始化的方法配置)");
}
//在类中创建执行的销毁方法
public void destroyMethod()
{
System.out.println("调用bean的销毁方法");
}
}
在XML文件的配置
<bean id="myBean" class="com.atguigu.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
<property name="oname" value="手机"></property>
</bean>
测试
@Test
public void test3()
{
ApplicationContext contest=new ClassPathXmlApplicationContext("bean7.xml");
Orders order=contest.getBean("myBean",Orders.class);//获取对象
System.out.println("获取bean,获取对象");
System.out.println(order);
//手动让bean实例销毁
((ClassPathXmlApplicationContext) contest).close();
}
Bean的后置处理器的使用说明:
后置处理器是在bean生命周期里有多加两步:加在第三步前后
(1)通过构造器创建bean实例(无参构造)
(2)为bean的属性设置值和对其他bean引用(调用set方法)
(2.1)把bean的实例传递个bean后置处理器的一个方法执行postProcessBeforeInitialization
(3)调用bean的初始化方法(需要进行初始化的方法配置在xml文件创建对象时后面加init-Method="")
(3.1)把bean的实例传递个bean后置处理器的一个方法postProcessAfterInitialization
      (4)获取bean,获取对象
      (5)当容器关闭,调用bean的销毁方法(需要配置销毁的方法)
演示添加后置处理器效果:
  (1)创建类,并且实现接口BeanPostProcessor
![]()
   (2)配置两个方法
![]()
(3)在XML配置文件中配置后置处理器(在当前XML文件配置的后置处理器,会应用到这个文件创建的所有bean中,也就是说每个bean都会执行这个后置处理器的两个方法)


基于XML方式自动装配的知识点(IOC操作Bean管理)
什么是自动装配:在之前XML中都是手动用<property name="" value=""></property>来设置值
而现在自动装配是根据指定装配规则(根据属性名称或者类型),Spring自动将匹配的属性值进行注入
演示自动装配:bean标签属性autowire,autowire属性有两个值(byType、byName)
byName根据属性名注入(注入值bean的id值和类属性名称一致)、byType根据属性类型注入
基于XML方式引入外部属性文件(可以用于连接数据库时,引入一些固定值的)
配置数据库信息方式{
(1)直接配置用德鲁伊连接池:首先引入德鲁伊连接池依赖jar包
然后进行连接池的配置,创建bean8.xml,首先创建德鲁伊对象<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"></bean>

(2)引入外部属性文件配置数据库连接池
  首先创建属性文件
左边的prop可以随便写可以不写,但是只是为了区分
把外部的属性文件properties,引入到Spring配置文件中,引入context名称空间

在Spring配置文件中使用标签引入外部属性文件
<!--引入外部属性文件配置数据库-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${prop.driverClass}"></property> <!--驱动名称-->
<property name="url" value="${prop.url}"></property>
<property name="username" value="${prop.username}"></property>
<property name="password" value="${prop.password}"></property>
</bean>
</beans>
以上把所有关于基于XML方式实现的功能全部说完
}
 
 
 
                    
                



                
            
        
浙公网安备 33010602011771号