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"/>