Spring介绍

一、Spring概述

  简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring的大小和开销都是轻量级,完整的Spring框架可以在一个只有1M多的JAR文件里发布。

   七大模块

二、Spring优点

1.方便解耦,简化开发: Spring就是一个大工厂,专门负责生成Bean,可以将所有对象创建和依赖关系维护由Spring管理

2.  AOP编程的支持: Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

3. 声明式事务的支持: 只需要通过配置就可以完成对事务的管理,而无需手动编程

4. 方便程序的测试: SpringJunit4支持,可以通过注解方便的测试Spring程序

5. 方便集成各种优秀框架: Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:StrutsHibernateMyBatisQuartz等)的支持

6. 降低JavaEE API的使用难度Spring: JavaEE开发中一些难用的APIJDBCJavaMail、远程调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层;

 七、三级缓存解决循环依赖

https://blog.csdn.net/f641385712/article/details/92801300

原文地址:https://www.cnblogs.com/qmillet/p/12545646.html