spring框架

Spring 框架概念

Spring 是众多开源java项目中的一员,基于分层的javaEE应用一站式轻量级开源框架,主要核心是 IOC(控制反转/依赖注入)与 AOP(面向切面)两大技术,实现项目在开发过程中的轻松解耦,提高项 目的开发效率。

在项目中引入 Spring 立即可以带来下面的好处 降低组件之间的耦合度,实现软件各层之间的解耦。可 以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人 员就不再需要手工控制事务.也不需处理复杂的事务传播。 容器提供单例模式支持,开发人员不再需要自 己编写实现代码。 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。

IOC 控制反转Inversion Of Control

概念:

控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

添加 Spring 框架的依赖坐标

<!-- 添加Spring框架的核心依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.14.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
  <groupId>javax.annotation</groupId>
  <artifactId>javax.annotation-api</artifactId>
  <version>1.3.2</version>
</dependency>

添加Spring 配置文件

1. 在项目的src下创建文件夹 resources(Alt+insert)

2. 将 resources 标记为资源目录

3. 在 src\main\resources 目录下新建 spring.xml 文件,并拷贝官网文档提供的模板内容到 xml 中。

4. 在 spring.xml 中配置 Bean 对象

id:对象的名称
class:类的全路径名称
scope:singleton,单例(默认的),prototype 原型的,非单例的

<bean id="user" class="com.yjxxt.bean.User" scope="prototype">

实力对象的三种方式:

        构造器实例化

        通过默认构造器创建 空构造方法必须存在 否则创建失败

  
设置配置文件 spring.xml

<!--构造器初始化-->
<bean id="stu" class="com.yjxxt.bean.Student">
    <!--构造器
        name="参数名"
        value="实际参数"
         <constructor-arg name="sid" value="100"></constructor-arg>
         <constructor-arg name="sname" value="小黑"></constructor-arg>
    
    -->

        静态工厂实例化

                要有该工厂类及工厂方法

                工厂方法为静态的

设置配置文件 spring.xml

<!--静态工厂实例化对象-->
<bean id="car" class="com.yjxxt.factory.CarFactory" factory-method="getCar">
    <!--给工厂方法传入实际参数-->
    <constructor-arg value="QQ"></constructor-arg>
</bean>

        实例化工厂实例化

        工厂方法为非静态方法

        需要配置工厂bean,并在业务bean中配置factory-bean,factory-method属性

设置配置文件 spring.xm

<!--实例化工厂实例化对象-->
<!--实例化工厂-->
<bean id="carFactory" class="com.yjxxt.factory.CarFactory2"></bean>
<bean id="car1" factory-bean="carFactory" factory-method="getCar">
    <!--给工厂方法传入实际参数-->
    <constructor-arg value="BMW"></constructor-arg>
</bean>

 依赖注入方式

        set注入

 

 

        构造器注入

单个Bean对象作为参数

 多个Bean对象作为参数

 Bean对象和常用对象作为参数

        静态工厂注入

        实例化工厂注入

        p标签注入

 自动装配

概念:

注解方式注入 Bean 对于 bean 的注入,除了使用 xml 配置以外,可以使用注解配置。注解的配置,可以简化配置文件, 提高开发的速度,使程序看上去更简洁。对于注解的解释,Spring对于注解有专门的解释器,对定义的 注解进行解析,实现对应bean对象的注入。通过反射技术实现。

注解:

@Autowired 注解  byName

默认通过类型(Class类型)查找bean对象 与属性字段的名称无关

可以添加@Qualifier结合使用,通过value属性值查找bean对象(value属性值必须要设置,且值要 与bean标签的id属性值对应)

@Resource 注解  byName

名称查找对应的bean对象 (属性字段的名称与bean标签的id属性值相等)

如果属性字段名称未找到,则会通过类型(Class类型)查找

推荐使用@Resource 注解是属于J2EE的,减少了与Spring的耦合。

 核心配置文件spring.xml开启自动装配

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启自动装配-->
   <context:annotation-config/>
    <!--实例化对象-->
    <bean id="roleDao" class="com.yjxxt.dao.RoleDao"></bean>
    <bean id="roleService" class="com.yjxxt.service.RoleService"></bean>
</beans>


Spring IOC 扫描器

实际的开发中,bean的数量非常多,采用手动配置bean的方式已无法满足生产需要,Spring这时候 同样提供了扫描的方式,对扫描到的bean对象统一进行管理,简化开发配置,提高开发效率。

注解开发IOC

1:开启注解扫描

        <!--开启扫描-->
        <context:component-scan base-package="com.yjxxt"/>

2:在目标类上添加注解

        @Repository (Dao层)            查询用户记录

        @Service (Service层)           业务逻辑处理

        @Controller (Controller层)    接收请求      

        @Component (任意类)

bean对象的id属性默认是 类的首字母小写

3.添加自动装配注解

如果bean对象未在指定包范围,即使声明了注解,也无法实例化

        

@Autowired  vs @Resource

1:@Autowired 来至于spring框架,@Resource javax...

2:@Autowired根据类型装配,而@Resource跟据名称装配

3:一般@Autowired若遇到同一类型的数据不唯一,可以使用  @Qualifier(value = "roleDao")指定具体的对象名称

4:@Resource根据名称装配,若跟据名称找不到,则可以根据类型去寻找;

作用域

scope

singleton单例模式        --有缓存

prototype原型的,非单例的        --缓存

request

表示每个请求需要容器创建一个全新Bean。比如提交表单的数据必须是对每次请求新建一个Bean 来保持这些表单数据,请求结束释放这些数据。

session

表示每个会话需要容器创建一个全新Bean。比如对于每个用户一般会有一个会话,该用户的用户 信息需要存储到会话中,此时可以将该Bean作用域配置为session级别。

globleSession

类似于session作用域,其用于portlet(Portlet是基于Java的Web组件,由Portlet容器管理,并由容 器处理请求,生产动态内容)环境的web应用。如果在非portlet环境将视为session作用域。

lazy-init属性(懒加载)

如果为false,则在IOC容器启动时会实例化bean对象,默认false

如果为true,则IOC容器启动时不会实例化Bean对象,在使用bean对象时才会实例化

lazy-init设置为false有什么好处

        1)可以提前发现潜在的配置问题

        2)Bean 对象存在于缓存中,使用时不用再去实例化bean,加快程序运行效率

生命周期

默认在IOC容器加载时,实例化对象。

init   初始化有两种方式:

        在配置文档中通过指定 init-method 属性来完成。

destory 

  

实现销毁方式(Spring容器会维护bean对象的管理,可以指定bean对象的销毁所要执行的方法)。

 分层调用图

DI 依赖注入 Dependency Injection

工厂实例化

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值