spring框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring框架相关的知识,希望对你有一定的参考价值。

spring是什么?

  Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

spring是一站式框架

  web层:springMVC

  service层:spring的ioc

  dao层:spring的jdbcTemplate

spring的优点

  1.低侵入式设计,代码污染极低

 

  2.独立于各种应用服务器,基于Spring框架的应用

 

  3.Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦

 

  4.Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用

 

  5.Spring的ORM思想和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问

 

  6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

 

spring版本

  spring 4.x(目前更新spring至 5.0)

spring的ioc操作

  1、ioc的配置文件方式

  2、ioc的注解方式

spring的ioc底层原理(降低类与类之间的耦合度)

  1、xml配置文件      

  2、dom4j解析xml

  3、工厂设计模式

  4、反射

  具体实现:   

    ① 创建xml配置文件,配置要创建对象类

    ② 创建工厂类,使用dom4j解析配置文件+反射

       返回UserService对象的方法

         public static UserServicer getService(){}

       使用dom4j解析xml文件 根据id值userService,得到id值对应的class属性值

         String classValue = "class属性值"

       使用反射创建类对象

         Class clazz = Class.forName(classValue);

       创建类对象

         UserService service = clazz.newInstance();

         return service;

配置文件提示问题

  spring引入schema约束,把约束文件引入到eclipse中

    ①下载配置文件

    ②复制约束路径

    ③在属性中的XML CataLog中设置

Bean实例化的方式

  第一种 使用类的无参构造方法创建(重点)

    

  第二种 使用静态工厂创建

    

  第三种 使用实例工厂创建

    

Bean标签常用属性

  id: 名称,任意命名,不包含特殊符号

  class:创建对象所在类的全路径

  name: 功能和id属性一样,可以包含特殊符号

  scope:

    singleton:默认值,单例的

    prototype:多例的

    request:创建对象把对象放到request域中

    session:创建对象把对象放到session域里中

    globalSession:

属性的注入

  第一种 使用set方法注入(重点)

public class User{
    private String name;
    public void setName(String name){
       this.name = name;
   }
}

 

  第二种 有参数构造注入

public class User{
   private String name;
   pulbic User(String name){
     this.name = name;
   }
}

  第三种 使用接口注入

public interface Dao{
      public void delete(String name);
}
public class DaoImpl implements Dao{
    private String name;
    public void delete(String name){
        this.name = name;
    }
}

注入对象类型属性(重点)

  Service和Dao

P名称控件注

  xmlns:p="http://www.springframework.org/schema/p"

注入复杂类型属性

  数组:

  list集合:

  map集合:

  properties类型:

IOC和DI的区别

  IOC(inversion of control):控制反转,把对象创建交给spring进行配置

  DI(Dependency Injection):依赖注入,向类里面的属性中设置值

  关系:依赖注入不能单独存在,需要在ioc的基础之上来完成操作

spring整合web项目原理

  1.加载spring核心配置文件

    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");

    每次加载,new对象,功能可以实现,效率很低

  2.实现思想:把加载配置文件和创建对象过程,在服务器启动时候完成

  3.实现原理:

   (1)SevletContext对象

   (2)监听器

  具体使用:

    在服务器启动时候,为每个项目创建一个Servlet对象

    在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候可以创建

    使用监听器听到ServletContext对象创建时候,加载spring配置文件,把配置文件配置对象创建

    把创建出来的对象放到ServletContext域对象里面(setAttribute方法)

    获取对象时,到ServletContext域得到(getAttribute方法) 

以上是关于spring框架的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

Spring boot:thymeleaf 没有正确渲染片段

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段