目录
一. 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.集合注入
public interface UserService {
public void add();
}
public class UserServiceImpl implements UserService {
public void add() {
System.out.println("a_ico add user");
}
}
@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
public class MyBeanFactory {
public static UserService createService(){
return new UserServiceImpl();
}
}
与静态工厂比较:需要实例化实例工厂类
实例
工厂类:MyBeanFactory.classpublic class MyBeanFactory {
public UserService createService(){//此处就是非static方法了
return new UserServiceImpl();
}
}
即使UserServiceImpl不实现任何借口,都能进行bean的实例化。
单spring ioc生成的并不是动态代理的对象,只有aop增强后才是代理对象,需要配置aop。
ioc只是用到了反射生成实例,并没有用到aop动态代理。
动态代理不是反射,jdk动态代理用到反射。
FactoryBean:是一个特殊的bean,具有工厂生成对象能力,只能生成特定的对象。
bean必须使用 FactoryBean接口,此接口提供方法 getObject() 用于获得特定bean。
例:ProxyFactoryBean 就是FactoryBean的一个实现,用于生产代理对象
先创建FB实例,使用调用getObject()方法,并返回方法的返回值
BeanFactory 上边提到的 静态工厂bean,实例工厂bean,生成普通bean
FactoryBean:特殊bean,用于生成另一个特定的bean。例如:ProxyFactoryBean ,此工厂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实例。
1234
对setter进行简化:
需要引入:xmlns:p="http://www.springframework.org/schema/p"
* 对进行统一编程,所有的内容都使用value
#{123}、#{'jack'} : 数字、字符串
#{beanId} :另一个bean引用
#{beanId.propName} :操作数据
#{beanId.toString()} :执行方法
#{T(类).字段|方法} :静态方法或字段
com.rodn.e_DI.d_coll
DS
DZD
屌丝
屌中屌
于嵩楠
曾卫
杨煜
曾小贤
停封
薄纸
关系
嫐
嬲
挊