spring学习笔记_04_IOC 装配bean基于XML

 

目录

一. bean ioc实例化方式3种

1.默认构造

2.静态工厂

3.实例工厂

待思考:spring ioc生成的不一定是动态代理的对象

二. bean的种类2种

1.普通bean     

2.FactoryBean

BeanFactory 和 FactoryBean 对比:

三.bean的作用域

四.属性依赖注入5种方式

1.构造方法

 2.setter方法

3.p命名空间

 4.SpEL

5.集合注入


 


一. bean ioc实例化方式3种

1.默认构造

    配置文件:


 

     UserService.class

public interface UserService {

	public void add();
}

     UserServiceImpl.class

public class UserServiceImpl  implements UserService {

	public void add() {
		 System.out.println("a_ico add user"); 
	}

}

     Test

 @Test
	 public void demo2(){
		String xmlPath= "com/rodn/c0_spring/construct/beans.xml"; 
		//1.获得容器
		ApplicationContext act = new ClassPathXmlApplicationContext(xmlPath); 
		UserServiceImpl userService = (UserServiceImpl)act.getBean("userService");
		userService.add();
	 }

    输出

a_ico add user

2.静态工厂

    配置文件

 
 

    提供静态工厂类:MyBeanFactory.class

public class MyBeanFactory {
	 
	public static UserService createService(){
		return new UserServiceImpl();
	}
}

    userservice userserviceImpl与1相同

    测试与1也一样

3.实例工厂

    配置文件

与静态工厂比较:需要实例化实例工厂类

  
    
    
    

    提供实例工厂类:MyBeanFactory.class

public class MyBeanFactory {
	 
	public   UserService createService(){//此处就是非static方法了
		return new UserServiceImpl();  
	}
}

    userservice userserviceImpl与1相同

    测试与1也一样

待思考:spring ioc生成的不一定是动态代理的对象

即使UserServiceImpl不实现任何借口,都能进行bean的实例化。

单spring ioc生成的并不是动态代理的对象,只有aop增强后才是代理对象,需要配置aop。

ioc只是用到了反射生成实例,并没有用到aop动态代理。

动态代理不是反射,jdk动态代理用到反射。

二. bean的种类2种

1.普通bean     

,spring直接创建A实例,并返回

2.FactoryBean

FactoryBean:是一个特殊的bean,具有工厂生成对象能力,只能生成特定的对象。
           bean必须使用 FactoryBean接口,此接口提供方法 getObject() 用于获得特定bean。

例:ProxyFactoryBean 就是FactoryBean的一个实现,用于生产代理对象

先创建FB实例,使用调用getObject()方法,并返回方法的返回值

BeanFactory 和 FactoryBean 对比:

BeanFactory 上边提到的 静态工厂bean,实例工厂bean,生成普通bean

FactoryBean:特殊bean,用于生成另一个特定的bean。例如:ProxyFactoryBean ,此工厂bean用于生产代理。
获得代理对象实例。AOP使用 ,以后学习

三.bean的作用域

作用域:用于确定spring创建bean实例个数 
使用方式:

① singleton
             使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例,默认值。
② prototype
             使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。
③ request
            该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于                                   WebApplicationContext环境。
④ session
             该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。
⑤ global-session
             该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

四.属性依赖注入5种方式

1.构造方法





 2.setter方法





1234













 

3.p命名空间

对setter进行简化:
需要引入:xmlns:p="http://www.springframework.org/schema/p"
   
  
  

 4.SpEL

* 对进行统一编程,所有的内容都使用value

#{123}、#{'jack'} : 数字、字符串
#{beanId} :另一个bean引用
#{beanId.propName} :操作数据
#{beanId.toString()} :执行方法
#{T(类).字段|方法} :静态方法或字段
 
 
 
  

5.集合注入

com.rodn.e_DI.d_coll




DS
DZD
屌丝
屌中屌




于嵩楠
曾卫
杨煜
曾小贤




停封
薄纸
关系







rose

肉丝










 

 

 

你可能感兴趣的:(spring学习笔记,spring学习笔记)