spring 入门 (一)

7 篇文章 0 订阅

spring 入门 (一)

标准三连

Spring 是什么?

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性可测试性松耦合的角度而言,任何Java应用都可以从Spring中受益
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

为什么要用 Spring?

  • 方便解耦,简化开发
  • AOP 编程的支持
  • 声明事务的支持
  • 方便程序的测试
  • 方便集成各种优秀框架
  • 降低java EE API 使用难度
  • java 源码经典的学习范例

Spring 怎么使用?

- 导入jar包 (加入 Spring-context 依赖 一共会导入6个 Spring jar包)

<dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.1.5.RELEASE</version>
     </dependency>

- 添加配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">
                           
    <context:annotation-config/>
    <context:component-scan base-package="com.itheima"/>
</beans>

- 创建 Spring ioc 容器

  • ClassPathXmlApplicaionContext
  • FileSystemXmlApplicaionContext
  • AnnotactionConfigXmlApplicaionContext

Spring 配置文件标签

bean 标签
属性作用
id对象的应用名称,一次只能定义一个引用名称
name对象的应用名称,一次能定义多个,用空格和逗号隔开
class类全名
init-method初始化方法,创建对象时执行
destory-method销毁方法,容器销毁时执行
lazy-init懒加载,单例模式下有效,从容器中获取对象时创建对象
scope对象范围
scope 属性
  • singleton 单例。默认值。默认在创建容器时创建
  • prototype 多例。每次容器中获取对象都会创建一个全新的对象
  • request 对象会自动绑定到requset域,在web项目中有效
  • session 对象会自动绑定到 session域,在web 项目中有效
  • globalsession 在集群环境中使用,如果不是集群环境 作用和 session一样

创建对象

- 无参构造的形式
<bean id = "user" class = "com.java.User"/>
- 工厂静态方法创建对象
<bean id = "user" class = "com.java.UserFactory" factory-method = "createUser"/>
- 工厂非静态方法创建对象
<bean id = "userFactory" class = "com.java.UserFactory" />
<bean id = "user" factory-bean = "userFactory"  factory-method = "createUser"/>

依赖注入

example 带参构造方式实现依赖注入

constructor-arg 标签

属性作用
value给简单类型的属性赋值
index指定给第几个参数赋值,从0开始
name指定构造函数的形参名称
type参数类型
<bean id = "user" class = "com.java.UserFactory">
<constructor-arg index="0" name = "id" type = "int" value = "100"/>
</bean>
example set方法实现依赖注入

property 标签

属性作用
name指定对象的属性
value指定对象属性值
ref指定对象属性值,值是引用容器中的另外一个对象的bean的id
<bean id = "user" class = "com.java.UserFactory">
<property name = "id" value = "100"/>
<property name = "name" ref = "str"/>
</bean>
example p名称空间方式实现依赖注入
配置文件 约束标签 加入 命名空间约束

<bean id = "user" class = "com.java.UserFactory" p:id = "100">
example 给集合属性赋值

太简单了 不写了

Bean 的声明周期

1.instantiate bean 对象实例化
2.populate properties 封装属性
3.如果Bean实现BeanNameAware 执行 setBeanName
4.如果Bean实现BeanFactoryAware 执行setBeanFactory ,获取Spring容器
5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
6.如果Bean实现InitializingBean 执行 afterPropertiesSet
7.调用 指定初始化方法 init
8.如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
执行业务处理
9.如果Bean实现 DisposableBean 执行 destroy
101.调用 指定销毁方法 customerDestroy

Spring 配置文件中加载 classpath 下的 配置文件

<context:property-placeholder location=:"classpath:DataSource.properties"/>

Spring 注解配置

开启注解扫描

<context:component-scan base-package="com.test">
创建对象依赖注入生命周期取代spring配置文件注解
@Component@Autowired@Scope@Configuration
@Controller@Qualifier@Lazy@ComponentScan
@Service@Resource@PostConstruct@Import
@Repository@Value@PreDestory@PropertySource
@Bean

创建对象的注解

- @Component

应用范围: 工具类

- @Controller

应用范围: 表现层

- @Service

应用范围: 业务层

- @Repository

应用范围: 持久层

依赖注入的注解

- @Autowired

作用范围: 字段, 方法

  • 根据修饰的字段的类型,去容器中找该类型的对象注入
  • 如果该类型的对象有多个,会根据字段的名称作为bean 的id 去容器中查找
  • 如果该类型的对象有多个,且根据字段名称没有找到, 则报错: NoUniqueBean
- @Qualifier

作用范围: : 字段, 方法

  • 纯注解开发中单独使用: 配合 @Bean 注解一起使用,方法参数设置 名称
  • Qualifier 可以让 Autowired 根据指定的名称注入
  • 通常都是与 Autowired 一起使用
  • 使用 Qualifier 后只会根据名称查找
- @Resource

作用范围: : 字段, 方法

  • 可以根据 名称 或者 类型注入等同于 Autowired + Qualifier
- @Value

作用范围: : 字段

  • 直接给简单类型的字段赋值
  • 获取配置文件值(纯注解使用)

生命周期的注解

- @Scope

作用范围: 类
对应 scope 标签

  • 指定对象单例 或 多例: singleton / protortype
- @Lazy

作用范围: 类
对应 lazy-init 标签

  • 延迟初始化
  • 只对单例有效
  • 在第一次从容器中获取对象时创建对象
- @PostConstruct

作用范围: 方法
对应 init标签

  • 修饰的方法会在创建对象之后执行
  • 用于初始化资源
- @PreDesstory

作用范围: 方法
对应 destory-method

  • 修饰的方法 会在 ioc 容器销毁时 执行
  • 用于释放资源

取代Spring配置文件的注解

- @Configuraction
  • 修饰的类就是注解配置类
  • 此注解取代: applicationContext.xml
  • 此时创建容器时,需要加载此注解修饰的类
- @ComponentScan
  • 开启注解扫描
  • 取代: <context:component-scan base-package=“com.tset”>
  • basePackages 指定要扫描的包
- @Import

作用范围: 类

  • 加载其他配置管理类
- @PropertySource

作用范围: 类

  • 加载类下面的spring配置文件
- @Bean

作用范围: 方法

  • 修饰在方法上,会自动把方法返回的结果加入 ioc 容器
  • 也可以在指定加入 ioc 容器中对象的名称: @Bean (name = “dataSource”)
  • 修饰带参数方法
  • 自动根据方法参数类型,去容器中找该类型的对象注入
  • 如果类型有多个,会根据参数名称去ioc 容器中找对应的对象注入
  • @qualifier 可以指定名称,按照指定的名称去容器中查找 (@Qualifier 写在 参数列表前)

注解与XML应用

  1. 原则:注解与xml 配置做的事情是一样的,哪种简单,可以提高开发效率就用哪种,.
  2. 注解应用: 我们自己写的类可以使用注解
  3. xml 应用: jar包中的类可以使用 xml 配置
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值