spring和环境搭建以及bean的简单测试
1.spring 是一个分层的轻量级的开源框架2003年由Rod Johnson创建。
1.1控制层:提供了spring mvc
1.2业务层:解决了普通bean的IoC(控制反转)
1.3持久层:spring提供了spring jdbc,以及可以整合所有ORM框架的支持
2.spring的作用
控制反转;面向切面编程;包含并管理应用对象的配置和生命周期等;框架性;
所有这些都是为了开发人员编写代码更加干净,更加可管理更方便测试。同时spring对当前主流框架都提供了支持。
3.spring版本信息
spring3.x
spring4.x (我们一般使用)
spring5.x
4.spring环境搭建
spring源码现在托管在了Github上面,找到并下载spring-framework-4.3.6.RELEASE-dist这个源码包,内部包含了所有的api文档,spring依赖以及spring约束。
搭建spring工程(javaProject项目)
1>导入依赖并添加到类路径下:commons-logging.jar;log4j.jar; spring-bean.jar;spring-core.jar;spring-context.jar;spring-expression.jar;
2>添加applicationContext.xml文件(添加头文件信息根据官网)
3>手动配置schema约束
location: spring-framework-4.3.6.RELEASE-dist\spring-framework-4.3.6.RELEASE\schema\beans\spring-beans-4.3.xsd
key type: Schema location
key: http://www.springframework.org/schema/beans/spring-beans.xsd
5.spring IoC(控制反转)
●基于xml的IoC
5.1简单bean的IoC测试:
准备条件:
创建接口并创建实体类
创建配置文
<bean name="userDao" class="com.sofwin.dao.impl.UserDaoOracleImpl"></bean>
</beans>
创建测试类并别写测试程序
//加载类路径下的applicationContext.xml 生成ApplicationContext工厂对象
ApplicationContext context = new ClassPathXMLApplicationContext("applicationContext.xml");
//通过bean的名称来控制反转生成对象(bean中的id或name)
UserDao dao = (UserDao)context.getBean("userDao");
dao.saveUser();//调用dao的方法测试
5.2静态工厂Beand的IoC
即工厂类中获取实例的方法是静态方法
首先需要创建静态工厂类,通过工厂中的静态方法返回一个实例;
主要区别在于bean的class属性成为了工厂,同时添加了属性factory-method属性,属性值为工厂的静态放法
5.3实例工厂Bean的IoC
即工厂类中获取实例的方法是普通方法
首先创建实例工厂类,通过工厂中的普通方法返回一个实例;
主要区别再远bean不在是一个,而是两个,一个是工厂bean ,它的class属性值是工厂类的全限定类名;另一个是普通测试bean,不需要有class属性,可以直接通过factory-bean的属性值找到设定好的工厂bean,同时通过factory-method的属性值找到实例工厂类中的普通方法来返回工厂方法要生成的实例。
5.4Bean的生命周期
构造方法,初始化方法(构造方法执行后执行),销毁方法(容器关闭的时候bean被销毁,,销毁方法被调用)
<bean id="userDao" class="com.sofwin.dao.impl.UserDaoImpl" init-method="init2"
destroy-method="destroy"></bean>
5.5后处理Bean
在自定义bean的初始化方法执行前和执行后进行扩展
需要实现BeanPostProcessor接口,重写before和after方法,同时,需要在配置文件中配置,这一类型的bean不需要id和name它会直接作用到所有自定义bean的初始化方法之前和所有自定义bean的原生方法之后进行扩展。
◑◑后处理bean的配置
<bean class="com.sofwin.util.BeanPostPressor2"></bean>
定义后处理bean
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class BeanPostPressor2 implements BeanPostProcessor {
//在自定义JavaBean的初始化方法执行前执行
//bean:拦截到的自定义javaBean的实例对象
//beanName;配置的javaBean的name或id
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("prostBefore.........."+beanName);
return bean;
}
//在自定义JavaBean的初始化方法执行后执行
//bean:拦截到的自定义javaBean的实例对象
//beanName;配置的javaBean的name或id
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postAfter........"+beanName);
return bean;
}
}
●基于annotation的IoC
使用IoC注解首先需要在配置文件中开启组件扫描
开启组件扫描首先需要在applicationContext.xml文件中添加context约束(context约束又需要spring-aop依赖)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 打开组件扫描
base-package:指定扫描注解的包
-->
<context:component-scan base-package="com.sofwin.dao"></context:component-scan>
</beans>
IoC注解有:
@Component(代表bean标签,可以跟括号里面是beanId,也可以不跟)
@Reposotry
@Service
@Controller
生命周期注解
@PostConstructor初始化方法(相当于init-method属性)
@PreDestroy销毁方法(相当于destory-method属性)
属性注入值用@Value(“值”)