随手记录--Spring 基础与容器(1)

1、使用XML装配JavaBean,根据定义的信息去创建并注入依赖的属性

    <!--default-autowire设置自动装载JavaBean依赖属性的方式:no(不自动注入),byName(根据名字自动装配),byType:根据属性的类型自动装配,contructor:根据构造方法的参数注入,autodetect自动检测注入    -->

    <!--default-dependency-check当要实例化一个JavaBean时,检测这个的一来属性,如果没背实例化,就先去实例化以来的属性,no:不检测,simple:基本数据类型,object:如果是另一个Bean就先检测并实例化哪个Bean,all:检测simple和objects  -->
    <!--default-destroy-method默认销毁方法 -->
    <!--default-init-method:默认初始方法 -->
    <!--default-lazy-init:延迟加载方式 ,若为true则会在Instance.getBean()时在创建实例,而非创建实例->调用setter()->再调用propertyName(getBean())  -->
    
<beans default-autowire="no" default-dependency-check="none" default-lazy-init="false" default-destroy-method="destroyMethod" default-init-method="initMethod">
    <description>
        随便写点什么,有意义的,用于描述当前的配置文件
    </description>
    <import resource="xxx.xml"/><!--导入其他配置文件 -->
    <bean id="beanName" class="package.class" singleton="false" autowire=" " depends-on="" init-method="初始化方法" destroy-method="注销方法" factory-method="工厂方法,需是静态的并返回实例" factory-bean="工厂类,与前面那个一起用" ><!--id是名字,class是类的信息即位置 -->
    <contructor-arg>
        <value>构造方法传递的参数</value>
    </contructor-arg>
    <contructor-arg index="参数位置索引可省" type="参数类型可省">
        <value>构造方法传递的参数</value>
    </contructor-arg><!--使用构造方法时,先Resource rs=new ClassPathResource("applicationContext.xml");    然后BeanFactory bf=new XmlBeanFactory(rs);  接着Class name=(Class)bf.getBean("Bean的id");-->
    </bean>
    
    <!--先Resource rs=new ClassPathResource("applicationContext.xml");    然后BeanFactory bf=new XmlBeanFactory(rs);  接着Class name=(Class)bf.getBean("Bean的id");-->
    <!--赋值标签:<value>xxxx</value>   <ref bean="BeanName">  <null/>空值  <list><value>xx</value></list>   <set><ref bean="arg"/><value></value></set>   <map><entry key="key1"><value>value</value></map>    <props><prop key="key1">value1</prop></props>  -->
    <!--匿名内部装配XML不用id或name
    -->
    
    <bean id="beanName" class="package.class" singleton="false" autowire=" " depends-on="" init-method="初始化方法" destroy-method="注销方法" factory-method="工厂方法,需是静态的并返回实例" factory-bean="工厂类,与前面那个一起用" ><!--id是名字,class是类的信息即位置 -->
        <property name="xx">
            <value>xx</value>
        </property>
        <property name="xx">
            <value>xx</value>
        </property>    
        
    </bean>
    

</beans>

2、BeanPostProcessor接口的定义,在初始化阶段,容器会查看是否实现,并分别调用两个方法,实现预处理和后处理

public interface BeanPostProcessor {
    //在初始化之前调用,定义预处理的业务逻辑或初始化数据
    Object postProcessBeforeInitialization(Object bean,String beanName)throws BeansException ;
    //在初始化之后调用,在预处理操作之后来检查或修改JavaBean的属性配置,增添过滤等
    Object postProcessAfterInitialization(Object bean,String beanName)throws BeansException;
    //实现接口之后,要调用addBeanPostProcessor()注册
    
}


3、创建ApplicationContext容器,三种方法

String configLocation = null;
        Resource rs=new ClassPathResource("applicationContext.xml");
        ApplicationContext context=new ClassPathXmlApplicationContext(configLocation);//读取当前类路径的配置文件并装载
        ApplicationContext context2=new FileSystemXmlApplicationContext(configLocation);//通过参数指定配置文件的位置
        ApplicationContext context3=new XmlWebApplicationContext();//如果实现了ApplicationContextAware接口就会调用Javabean的setApplicationContext()方法
        XmlBeanFactory bf=new XmlBeanFactory(rs);
        //在容器内注册BeanPostProcessor的实例来对JavaBean进行处理
        BeanPostProcessorExample bp=new BeanPostProcessorExample();
        bf.addBeanPostProcessor((BeanPostProcessor) bp);//在容器中注册
        LogFile lf=(LogFile)bf.getBean("log");


public class BFA implements BeanFactoryAware{
    XmlBeanFactory beanFactory;
    
    @Override
    public void setBeanFactory(BeanFactory bf) throws BeansException {
        beanFactory=(XmlBeanFactory)bf;
        beanFactory.getBeanDefinitionNames();//获得所有JavaBean名字的一个数组
        beanFactory.getSingletonNames();//获得所有单例Bean的名字的数组
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        
    }
    
    
}


public class ACA implements ApplicationContextAware{
    ApplicationContext context;
    
    @Override
    public void setApplicationContext(ApplicationContext ac) throws BeansException {
        context=ac;//自动获取容器的引用
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
}


public class beanName implements BeanNameAware{
    String name;
    @Override
    public void setBeanName(String string) {
        //容器会将JavaBean的名字作为属性注入到javaBean
        name=string;
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
}


4、事件的监听

public class event extends ApplicationEvent{
    
    public event(Object source) {
        super(source);
    }
    
}


class listener implements ApplicationListener{
    //判断e的类型是何种时间并完成相应的处理
    @Override
    public void onApplicationEvent(ApplicationEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值