Spring可以分为6大模块:
Spring Core spring的核心功能: IOC容器, 解决对象创建及依赖关系
Spring Web Spring对web模块的支持。
可以与struts整合,让struts的action创建交给spring
spring mvc模式
Spring DAO Spring 对jdbc操作的支持 【JdbcTemplate模板工具类】
Spring ORM spring对orm的支持:
既可以与hibernate整合,【session】
也可以使用spring的对hibernate操作的封装
Spring AOP 切面编程
SpringEE spring 对javaEE其他模块的支持
引入jar包,涉及到Spring core的开发jar包有五个:
commons-logging-1.1.3.jar 日志
spring-beans-3.2.5.RELEASE.jar bean节点
spring-context-3.2.5.RELEASE.jar spring上下文节点
spring-core-3.2.5.RELEASE.jar spring核心功能
spring-expression-3.2.5.RELEASE.jar spring表达式相关表
Spring核心的配置文件applicationContext.xml
或者叫bean.xml
,通过ClassPathXmlApplicationContext来获取ApplicationContext(IOC容器)
在Spring中可以通过三种方式来配置对象:
使用XML文件配置
使用注解来配置
使用JavaConfig来配置
普通带参数的构造方法
<bean id="user" class="bean.User">
<!--
通过constructor这个节点来指定构造函数的参数类型、名称、第几个(index)
如果构造函数的参数值是一个对象,而不是一个普通类型的值,我们就需要用到ref属性了,而不是value
-->
<constructor-arg name="id" type="java.lang.String" value="1"/>
<constructor-arg name="username" type="java.lang.String" value="tom"/>
</bean>
工厂静态方法
<!--工厂静态方法创建对象,直接使用class指向静态类,指定静态方法就行了-->
<bean id="user" class="bean.Factory" factory-method="getBean"/>
工厂非静态方法:先创建工厂bean,用工厂bean调用非静态方法
<bean id="factory" class="bean.Factory"/>
<bean id="user" class="bean.User" factory-bean="factory" factory-method="getBean"/>
构造方法传入集合
通过注解来配置信息就是为了简化IOC容器的配置,注解可以把对象添加到IOC容器中、处理对象依赖关系
使用注解前提步骤:
xml配置文件先引入context名称空间
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation添加
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
开启注解扫描器
第一种方法:在xml添加
<context:component-scan base-package="包名"></context:component-scan>
第二种方法:通过自定义扫描类以@CompoentScan修饰来扫描IOC容器的bean对象。在使用@ComponentScan()这个注解的时候,在测试类上需要@ContextConfiguration这个注解来加载配置类,@ContextConfiguration这个注解在Spring的test包下
//表明该类是配置类
创建对象以及处理对象依赖关系,相关的注解:
@ComponentScan扫描器
@Configuration表明该类是配置类
@Component 指定把一个对象加入IOC容器,把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
@Repository 作用同@Component; 在DAO层使用
@Service 作用同@Component; 在业务逻辑层使用
@Controller 作用同@Component; 在控制层使用
@Resource 依赖关系
如果@Resource不指定值name,那么就根据类型来找,相同的类型在IOC容器中不能有两个
如果@Resource指定了值,那么就根据名字来找
测试代码
//把对象添加到容器中,首字母会小写
由于Spring的自动装配并不能将第三方库组件装配到应用中,于是需要显式装配配置。
通过java代码来配置Bean:
编写一个java类,使用@Configuration修饰该类,被@Configuration修饰的类就是配置类
在配置类中使用@Bean修饰方法,蒋返回值加入到IOC容器中
使用@Bean来修饰方法,该方法返回一个对象。
不管方法体内的对象是怎么创建的,Spring可以获取得到对象就行了。
Spring内部会将该对象加入到IOC容器中
容器中bean的ID默认为方法名
在测试类使用@ContextConfiguration加载配置类的信息
注解和XML配置是可以混合使用的,JavaConfig和XML也是可以混合使用的…
如果JavaConfig的配置类是分散的,我们一般再创建一个更高级的配置类(root),然后使用@Import来将配置类进行组合 如果XML的配置文件是分散的,我们也是创建一个更高级的配置文件(root),然后将配置文件组合
在JavaConfig引用XML
使用@ImportResource()
在XML引用JavaConfig
使用<bean>节点就行了
scope的值就只有两个:单例、多例,spring默认是单例
当我们使用singleton【单例】的时候,从IOC容器获取的对象都是同一个,默认是单例 【service/dao/工具类】
当使用singleton的时候,对象在IOC容器初始化时创建
当我们使用prototype【多例】的时候,从IOC容器获取的对象都是不同的,【Action对象】
当使用prototype的时候,对象在使用的时候才创建
lazy-init属性只对singleton【单例】的对象有效,lazy-init默认为false
有的时候,可能我们**想要对象在使用的时候才创建,那么将lazy-init设置为ture
如果我们想要对象在创建后,执行某个方法,我们指定为init-method属性,对应对象的init_user方法
如果我们想要IOC容器销毁后,执行某个方法,我们指定destroy-method属性,在调用容器对象的destroy方法时候执行(容器用实现类)
原文:https://www.cnblogs.com/yjh1995/p/14164331.html