Spring学习

Spring是一站式轻量级的开源框架

  一站式:框架很“全面”且整合度高

      (1)Spring在javaee三层结构中,每一层都提供不同的解决方案

        web层:SpringMVC

        service层:IOC

        dao层:JdbcTemplate

  轻量级:该框架不需要依赖其他东西就可以直接使用

  开源:免费提供源代码

Spring的两大核心部分即IOC和AOP

  IOC:控制反转,降低耦合性,对象的创建不是通过new,而是都交给了Spring的xml配置文件(src下)

  AOP:面向切面,程序扩展功能不是通过修改源代码来实现的 

(一)IOC

   (1)IOC操作两部分:①IOC的配置文件 ②IOC的注释方式

①IOC配置文件方式:

   (1)IOC底层原理:

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

        <bean id="" class=""></bean>

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

        ▲ 使用dom4j解析xml文件,通过id值,得到id值对应的class属性值

        ▲ 通过反射创建该属性值的对象,然后通过方法返回该对象即可

   IOC的实现:用反射机制加上工厂及其配置文件来完成的

   (2)bean标签的常用属性

       ①id:起名称,id的属性值不能包含特殊符号($,&,#,_等)

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

       ③name:功能和id的一样,但是区别是id的属性值不能包含特殊符号($,&,#,_等)而name的属性值可以包含      

       ④scope:设置bean的作用范围

          singleton:创建对象时是单例(默认)

          prototype:创建对象时是多实例的

  ♥ (3)注入属性(常用set方法注入)

      最重点的是注入对象类型属性,所以仅介绍此类型的属性注入:

        ▲在要被注入的类中设置该对象属性的set方法 

        ▲创建配置文件,引入schema约束

        <bean id="" class="">

          <!-- ref:要注入的对象那个类型创建时的id值-->

          <property name="" ref=""></property>                 (此处注意:要是注入一般类型,ref就是value <property name="" value="">)

        </bean>

    (4)IOC和DI区别:

       IOC:控制反转,把对象的创建交给spring的配置文件处理

       DI:依赖注入,相类里面的属性设置属性值 

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

②IOC的注解方式

    (1)注解:代码中一些特殊的标记,使用标记可完成功能

        注解写法:@注解名称(value=属性值)

       注解使用:方法上,类上面,属性上面

      注解可创建对象,可注入属性

    (2)使用注解准备:

       ▲导入注解要用的jar包:spring-aop-4.2.4-RELEASE.jar

       ▲创建类,创建方法

       ▲创建xml配置文件,引入schema约束,此时约束有beans和context

       ▲用了注解就不用在配置文件中配置<bean>标签创建对象了,只需要开启注解扫描即可 

         <context:component-scan base-package=" "></context:component-scan>

         base-package:com/com.spring/com.spring.User(这里的包名是自己建的) 

    (3)是用注解创建对象:

       在要创建对象的类上面使用注解即可创建对象

        例:@Component(value="user")

       spring中提供了三个@Component的衍生注解,目前这四个注解的功能是一样的

          @Controller(value="user"):WEB层

          @Service(value="user"):业务层

          @Pesponsitory(value="user"):持久层

       补充:@Scope(value="prototype/singleton")    对象多实例还是单实例 

    (4)用注解注入属性:(使用注解不需要set方法)

       @Autowired  :自动注入

       @Resource(name=""):name指要注入的对象名称

       在要注入的属性上面用:

        例如:

           @Autowired

           private UserDao userDao;

        (@AutoWired会根据下面的属性类型去类里面找实例化好的对象),例:去UserDao类里去找创建好的对象

           @Resource(name="userDao")

           private UserDao userDao;

        (@Resource(name="") 会去UserDao类里根据name去找该对象)

  IOC总结:一般对象的创建用配置文件配置,注入属性用注解的方法

 (二)AOP

原文地址:https://www.cnblogs.com/rgever/p/8487937.html