zoukankan      html  css  js  c++  java
  • spring介绍及相关注解

    spring介绍

    spring框架是j2EE企业级应用的轻量级的开源框架。是以IOC控制反转、AOP面向切面编程为核心;提供了表现层springmvc和持久层spring JDBC,以及业务层的事务管理等企业级应用解决方案;还能实现将开源世界中众多优秀的第三方框架整合,成为越来越受欢迎的J2EE企业级应用框架。

    spring框架优点

    ioc解耦:通过spring提供的ioc容器,将对象间的依赖关系交给spring管理,避免程序间的过度耦合

    aop面向切面编程:通过spring的AOP功能,方便实现面向切面编程,很多使用传统OOP编程不容易实现的业务功能,可以通过AOP轻松实现。比如事务管理,日志功能。

    声明式事务管理:通过声明式方式灵活实现事务管理,提高开发效率和质量,将我们(程序员)从单调烦闷的事务管理代码中解脱出来

    与第三方框架整合:spring框架降低了第三方框架的集成使用难度,提供了对各种框架(quartz、mybatis、springmvc等)的直接支持

    Ioc:控制反转

    谁控制谁,控制什么?

    传统设计程序中,我们都是直接通过new来创建对象,是我们主动去创建依赖对象,现在IOC有一个专门的容器来创建这些对象,即ioc容器控制对象的创建,

    为何是反转,哪些方面反转了?

    在传统开发模式下,收拾我们自己去对象中获取依赖对象,正转,现在有ioc容器后,由ioc创建并注入依赖对象,这就是反转, 依赖对象的获取被反转了Ioc:控制反转

    谁控制谁,控制什么?

    传统设计程序中,我们都是直接通过new来创建对象,是我们主动去创建依赖对象,现在IOC有一个专门的容器来创建这些对象,即ioc容器控制对象的创建,

    为何是反转,哪些方面反转了?

    在传统开发模式下,收拾我们自己去对象中获取依赖对象,正转,现在有ioc容器后,由ioc创建并注入依赖对象,这就是反转, 依赖对象的获取被反转了

    使用spring框架提供的IOC容器,获取对象:
    1.spring框架提供了一个大工厂接口:ApplicationContext
    2.该工厂接口中提供了一个getBean()方法,用于根据bean的名称获取bean
    3.该工厂接口提供了常见的实现类:
    3.1.ClassPathXmlApplicationContext
    从类路径下加载bean.xml配置文件,创建spring的ioc容器。在实际项目中使用最多
    3.2.FileSystemXmlApplicationContext
    从文件系统路径下加载bean.xml配置文件,创建spring的ioc容器。在实际项目中几乎不用

    搭建spring IOC环境

    pom.xml

        <properties>
            <!-- spring版本 -->
            <spring.version>5.0.2.RELEASE</spring.version>
        </properties>
    
        <!--依赖包-->
        <dependencies>
            <!--spring ioc依赖-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            
        </dependencies>
    

    配置bean.xml

    <!--配置service--> 
    <bean id="customerService" class="com.xt.service.impl.CustomerServiceImpl"></bean>
    
        <!--配置dao-->
        <bean id="customerDao" class="com.xt.dao.impl.CustomerDaoImpl"></bean>
    
    

    编写表现层

    // 1.加载spring配置文件,创建spring ioc容器
            ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    
            // 2.从容器中获取客户service对象
            CustomerService customerService = (CustomerService)context.getBean("customerService");
    

    BeanFactory与ApplicationContext区别

    1 BeanFactory是顶层接口

    2 ApplicationContext是子接口

    3 最大的区别就是常见对象的时间不一样

    BeanFactory是采用的延迟加载的思想,即什么时候使用对象,就什么时候创建对象

    ApplicationContext 采用立即创建的思想,即一加载配置文件,就立即创建

    基于注解配置IOC

    配置bean.xml

      <!--配置包扫描注解配置dao/service,说明:
            第一步:导入context名称空间和约束
        xmlns:context="http://www.springframework.org/schema/context
            第二步:
                通过<context:component-scan>标签配置包扫描。spring框架在创建IOC容器的时候,
                会扫描指定的包,和它的子包
        -->
        <context:component-scan base-package="com.xt"></context:component-scan>
    

    常用注解

    创建对象相关的注解

    @Component

    作用:配置javaBean对象。相当于xml配置方式中的bean标签

    属性:
    value:给bean一个唯一标识名称
    细节:
    1.value属性可以省略
    2.默认使用类的名称首字母小写,作为bean的名称

    @Component演化的三个注解:
    @Controller: 一般用于表现层
    @Service:一般用于业务层
    @Repository:一般用于持久层

    设置bean作用范围相关的注解

    @Scope

    作用:设置bean的作用范围。相当于xml配置方式中bean标签的scope属性

    value:指定作用范围取值
    属性取值:
    singleton:单例。默认值
    prototype:多例
    request:web项目中,把bean对象存入request域中
    session:web项目中,把bean对象存入session域中
    globalsession:web项目中,把bean对象存入全局session域中

    注入数据相关的注解:@Autowired、@Qualifier、@Resource、@Value

    @Autowired

    作用:默认按照bean的类型注入数据

    属性:required:指定目标bean是否必须存在于spring的IOC容器(true必须存在;false:可以不存在;默认true)

    注意:

    1. 在spring容器中,如果同一个类型存在多个bean实例对象
    2.则先按照bean的类型进行注入,再按照bean的名称进行匹配
    3.匹配上注入成功;匹配不上注入失败
    

    @Qualifier

    作用:
    与@Autowired注解一起使用,指定在按照bean类型注入的基础上,再按照bean的名称注入

    属性:
    value:指定bean的名称

    注意:
    1.在类的成员变量上,不能单独使用。需要与@Autowired注解一起使用
    2.在方法的成员变量上,可以单独使用

    @Resource

    作用:
    默认按照bean的名称注入数据

    属性:
    name:指定bean的名称注入数据
    type:指定bean的类型注入数据

    注意:
    默认按照bean的名称匹配注入数据。如果注入失败,再按照bean的类型注入

    @Value

    作用:
    给java简单类型成员变量注入数据

    与bean的生命周期相关的注解:

    @PostConstruct:

    初始化操作,相当于xml配置方式中bean标签的init-method属性

    @PreDestroy:

    销毁操作,相当于xml配置方式中bean标签的destroy-method属性
    *

  • 相关阅读:
    Cronolog切割tomcat日志
    使用TortoiseGit+码云管理项目代码
    POI使用 (4.0) 常用改动
    MySQL-with rollup函数运用
    CentOS7使用yum安装MySQL8.0
    java 8 新特性之Stream的排序/分类
    java阳历转农历
    MyBatis SQL xml处理小于号与大于号
    mysql update不能直接使用select的结果
    Java面试中遇到的坑【填坑篇】
  • 原文地址:https://www.cnblogs.com/kt-ting/p/12573748.html
Copyright © 2011-2022 走看看