spring入门(使用xml进行bean注入)

来源:互联网 发布:云 大数据 广州 编辑:程序博客网 时间:2024/06/07 03:18

spring是一个控制反转和面向切面的容器框架
控制反转IOC:程序本身不负责对象的创建,由外部容器创建维护,依赖注入是其中的一个实现形式

bean的容器:beanfactory提供结构和基本功能,加载初始化bean。Context保存bean对象。
Web一般用ContextLoaderListener或者ContextLoaderServlet获得context

 ApplicationContext context = new FileSystemXmlApplicationContext("classpath*:spring-ioc.xml");//获得上下文        InjectionService oneInterface = (InjectionService) context.getBean("injectionService");//从上下文中获得bean

bean设置注入:就是将bean的方法属性进行初始化

<bean id="injectionService" class="Interface.InjectionServiceImp">       <property name="injectionDAO" ref="injectionDAO"></property>   </bean>    <bean id="injectionDAO" class="Interface.InjectionDAOImpl"></bean>

bean构造注入:传入bean的构造方法的参数。

<bean id="injectionService" class="Interface.InjectionServiceImp">       <constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>    </bean>    <bean id="injectionDAO" class="Interface.InjectionDAOImpl"></bean>

Bean的自动装配:
No,byname,byType,Constructor
byname:首先在头字段里面设置default-autowire,然后在同一个xml文件下如果有一个bean:a的名字和另一个一个bean:b的属性名和类型相同(其实应该是和setProperty()里面的Property字段相同,如果Property的首字母是大写的,则Bean a的id首字段可以为小写,但是一般都会让IDE自动设置属性的getter和setter所以一般不用管),并且b具有set的方法,则自动将a装配给b。(猜测是用反射机制来获得method,然后用method的后缀与beanID匹配。)
bytype:基本过程如上,但是是根据class来装配的
Construction:是根据构造器里面的class类型来匹配的

bean的配置项:id,class,scope,constructor-arg,property,autowiring/lazy-initialization mode,initialization/destruction method。

bean作用域:singleton单例(单个容器中,暂时理解为在同一context中),prototype每次请求创建新实例,request在request里面有效,session。

bean的生命周期:
定义,初始化,使用,销毁。
针对具体某个bean初始化的方法:1.实现initbean接口覆盖afterpropertySet方法。2.配置init-method。销毁的方法1.实现disposalbean,覆盖destroy2.配置destroy-method
全局默认的初始化和销毁的方法:头文件bean里面加入default-init-method和default-destroy-method
如果三种初始化和销毁的方法都存在,则全局不执行,接口先执行,method后执行。如果存在全局默认的初始化和销毁声明但是class里面不存在method也不会有报错

Aware接口:可以通过aware接口获取spring资源

Resource:resource是从applicationContext.getResource(“地址”)获取的,除了一下几种路径获得地址也可以直接输入文件名,则文件的路径前缀是等于当前的ApplicationContext的文件路径前缀的。

根据不同的project系统获得路径的方法:
classpath*:当前project的相对路径
FileSystemPath:根据文件的绝对路径
ServletContextPath:根据Servlet的相对路径
在这里提一下,classpath的默认路径是定义为source文件的文件夹下的文件。
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找

ApplicationContext的问题:ApplicationContext可以加载bean,获得resource获得spring资源,如果将bean容器看做一个实体的话,那是不是可以将Context比作为对于容器的一个I/O类。