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属性
*

原文地址:https://www.cnblogs.com/kt-ting/p/12573748.html