和postProcessAfterInitialization方法。
publicclassMyBeanPostProcessorimplements BeanPostProcessor{
@Override//该方法会在每个Bean创建好之后执行,执行完接着执行postProcessAfterInitialization方法
public ObjectpostProcessBeforeInitialization(Object bean, String beanName)throws BeansException {
System.out.println("处理Bean前...");
return bean;//处理完后要返回原来的bean
}
@Override
public ObjectpostProcessAfterInitialization(Object bean, String beanName)throws BeansException {
System.out.println("处理Bean后...");
return bean;//处理完后要返回原来的bean
}
}
2) 在配置文件注册该类。
4.4使用Spring来加载配置文件
说明:使用了context:property-placeholder后,Spring可以是根据${xxx}可以的内容到xxx.properties文件中找对应的值并设置到value上。
5. 工厂Bean(FactoryBean)
FactoyBean(接口)是一个专用于生产其它类型业务组件的Bean,用于生产其它产品的Bean。
注意:FactoyBean和BeanFactoy是两个完全不同的接口。前者专门用来生产Bean,后者专门用来获取Bean。
1) 自定义工厂Bean
自定义工厂Bean要实现FactoryBean接口。
publicclass PersonFactoryBeanimplementsFactoryBean
@Override
public PersongetObject() throws Exception {
System.out.println("getObject..........");
//返回一个Person类型的Bean
returnnew Person("张三");
}
@Override
publicClass
//返回该Bean的类型
System.out.println("getObjectType..........");
return Person.class;
}
@Override
publicboolean isSingleton() {
//该Bean是否是单例的
System.out.println("isSingleton..........");
returnfalse;
}
}
2) 在配置文件注册该类。
id="pfb"class="com.maple.spring.customtype.PersonFactoryBean"/> 6. 简化配置(p和c命名空间) p:属性 property c:构造函数 constructor c:parent-ref=”p5”引用其他bean。 p:name="李四" p:age="23"p:parent-ref="p3"/> c:name="王五"/> 7. 代理模式(理解AOP原理的基础) 代理模式包含抽象主题,代理主题和真实主题。 7.2使用JDK创建代理类 方式1: /* * 创建实现了IHello接口的类的代理对象 * 参数1:类加载器 * 参数2:接口的字节码 * 参数3:回调函数(每次调用代理对象非final修饰方法时都会执行里面的invoke方法) */ IHello hello = (IHello) Proxy.newProxyInstance(TestProxy.class.getClassLoader(),new Class[]{IHello.class},newInvocationHandler() { @Override public Object invoke(Objectproxy, Method method, Object[] args)throws Throwable { System.out.println("执行invoke方法----" +method.getName()); returnnull; } }); System.out.println(hello);//null System.out.println(hello.getClass());//class $Proxy4 hello.sayHi();//无内容 方式2: final IHello realObject=new HelloImpl();//真实对象 //代理对象 IHellohello = (IHello) Proxy
p和c命名空间是Spring3.0引入的,为了简化书写。
7.1概念
代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
使用JDK的Proxy类创建代理对象时,只能创建实现了某个接口的类的代理对象,没有实现接口的类是不能用JDK的Proxy类来创建代理对象的。