一、Spring概述
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring的大小和开销都是轻量级,完整的Spring框架可以在一个只有1M多的JAR文件里发布。
二、Spring优点
1.方便解耦,简化开发: Spring就是一个大工厂,专门负责生成Bean,可以将所有对象创建和依赖关系维护由Spring管理。
2. AOP编程的支持: Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
3. 声明式事务的支持: 只需要通过配置就可以完成对事务的管理,而无需手动编程
4. 方便程序的测试: Spring对Junit4支持,可以通过注解方便的测试Spring程序
5. 方便集成各种优秀框架: Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的支持
6. 降低JavaEE API的使用难度Spring: 对JavaEE开发中一些难用的API(JDBC、JavaMail、远程调webservice用等),都提供了封装,使这些API应用难度大大降低
三、加载Spring容器三种方式
1. ApplicationContext -- 立即创建,也就是在ApplicationContext创建的时候就立马创建所有的bean。
//类路径 ApplicationContext context = new ClassPathXmlApplicationContext("com//demo01/beans.xml"); //文件绝对路径 ApplicationContext context = new FileSystemXmlApplicationContext("bean文件绝对路径"); //注解 ApplicationContext context = new AnnotationConfigApplicationContext("userService");
2. BeanFactory---延迟创建,在用到bean的时候才会创建对应的bean.
Resource resource = new ClassPathResource("bean.xml"); BeanFactory factory = new XmlBeanFactory(resource ); factory.getBean("customerService"); //执行完这句之后,bean才会创建
四、装配Bean三种方式
1. 构造方法实例化
2. 静态工厂方法实例化
3. 实力工厂方法实例化
<!--装配bean的三种方式,所谓的装配bean就是在xml写一个bean标签--> <!-- 第一种方式: new 实现类--> <bean id="userService1" class="com.service.UserServiceImpl"></bean> <!-- 第二种方式:通过静态工厂方法--> <bean id="userService2" class="com.service.UserSereviceFactory1" factory-method="createUserService"></bean> <!--第三种方式:通过实例工厂方法 --> <!-- 创建实例factory2 bean--> <bean id="factory2" class="com..service.UserSereviceFactory2"></bean> <bean id="userService3" factory-bean="factory2" factory-method="createUserService"></bean>
public void test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("beans3.xml"); //new 对象 IUserService userService1 = (IUserService) context.getBean("userService1"); userService1.add(); //静态工厂 IUserService userService2 = UserSereviceFactory1.createUserService(); IUserService userService2 = (IUserService) context.getBean("userService2"); userService2.add(); //实例工厂 //1.创建工厂 UserSereviceFactory2 factory2 = new UserSereviceFactory2(); IUserService userService3 = factory2.createUserService(); IUserService userService3 = (IUserService) context.getBean("userService3"); userService3.add(); }
五、Bean的作用域
类别 |
说明 |
singleton |
在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在,默认值 |
prototype |
每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时 ,相当于执行new XxxBean() |
request |
每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境 |
session |
同一个HTTP Session 共享一个Bean,不同Session使用不同Bean,仅适用于WebApplicationContext 环境 |
globalSession |
一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext 环境 |
六、依赖注入Bean属性
1. 构造器注入
2. setter方法注入
3. p命名空间注入
4. 集合注入
5. 注解注入
@component取代<bean class="">、@component("id")取代<bean id="",class="">
衍生注解:@Repository(“名称”):dao层;@Service(“名称”):service层;@Controller(“名称”):web层;
七、三级缓存解决循环依赖