bean 中id和name标签的区别:
id:使用约束中的唯一约束,不能出现特殊字符; name:没有使用约束中的唯一约束,可以出现tesh理论上可以重复
一般情况下,装配一个Bean时,通过制定一个id属性作为Bean的名称。
class标签
class用于设置一个类的完全路径名称,主要作用是IOC容器生成类的实例。
Bean的作用域(作用范围配置)
scope:Bean的作用范围
bean的生命周期
其中比较重要的 是第五步和第8步,涉及到AOP的方法增强
如何增强一个类中的方法
1.新建一个类,MyBeanPostProcessor implements BeanPostProcessor,并重写里面的方法
2.Proxy.newProxyInstance(bean.getClass().getClass.Loader(),bean.getClass().getClas3.getInterface();new InvocationHandler{重写里面的invoke方法})
4.在applicationContext文件中新写一个bean标签,里面只有class路径为MybeanPostProcessor
public class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Override public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException { if ("userDao".equals(beanName)) { Object proxy = Proxy.newProxyInstance(bean.getClass().getClassLoader(), bean.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("change".equals(method.getName())) { System.out.println("校验===================="); return method.invoke(bean, args); } return method.invoke(bean, args); } }); return proxy; } else { return bean; } } }
applicationContext中
<bean id="userDao" class="com.imoo.ioc.demo3.UserDaoImpl"/>