当前位置: 首页 > news >正文

Spring的核心思想与注解

Spring: 一个开源的企业级应用开发框架,由 Rod Johnson 于 2003 年推出,核心目标是简化 Java 开发,提供一致的编程模型,同时解决企业级应用中的复杂性问题(如依赖管理、事务控制、安全性等)。Spring 框架以 "控制反转(IoC)""面向切面编程(AOP)" 为核心,衍生出一系列子项目(如 Spring Boot、Spring Cloud 等),形成了完整的生态体系,广泛应用于后端服务开发。

目录

一、Spring的核心特性

1、控制反转(IoC/DI(依赖注入)):

2、面向切面编程(AOP):

3、模块化设计:

4、常用Spring生态项目:

二、Spring环境搭建

1、添加坐标(pom.xml)添加spring-context依赖

2、创建主配置文件(bean.xml 导入依赖后才会出现)

三、Spring IOC / DI

1、IOC含义:

2、IOC使用步骤:

(1)将类注入,SpringIOC容器(xml配置,注解实现)

(2)加载Spring主配置文件:

①. 接口

②. 实现类:

3、DI含义:

4、DI使用步骤:

实现方式:

(1)set 注入:

(2) 构造方法注入

(3) 属性注入:(一般不用)

四、Spring 对Bean的管理

1、bean的创建(选其一)

2、bean 的作用域 (bean的创建方式)

3、bean的生命周期

(1)、实例化:创建对象

(2)、初始化:

(3)、操作使用

(4)、销毁了

五、Spring的注解的使用

1、Spring的发展

2、注解的使用:

(1)、注入类:使用@compone注解标注在类上替换掉之前的xml写法

(2)、注入数据:

方式一:

@value :修饰成员变量

方式二:

@Autowired:修饰成员变量注入javaBean

(3)、其他注解:

1、@Primary 类上

2、@Qualifier(value="名称") 装配javaBean属性时

3、@Resource(name="名称") jdk自带的注解 javabean属性

4、@Scope 作用域 修饰类

(4)、配置类注解:

一、Spring的核心特性

1、控制反转(IoC/DI(依赖注入)):

传统开发中,对象的创建和依赖关系由开发者手动管理;而 IoC 模式下,对象的创建、组装权交给 Spring 容器,开发者只需定义对象之间的依赖关系,容器会自动完成实例化和注入。

核心实现:Spring IoC 容器(如 ApplicationContext),通过 XML 配置、注解(如 @Component@Autowired)或 Java 代码定义对象。

2、面向切面编程(AOP):

将日志记录、事务管理、权限校验等横切关注点与业务逻辑分离,通过动态代理实现代码复用,避免重复编码。

典型应用:声明式事务(@Transactional)、日志切面、异常统一处理等。

3、模块化设计:

Spring 框架由多个模块组成,可按需引入:

  • spring Core:Spring框架的最基础部分,提供DI(依赖注入)特性
  • Springweb:为Spring在web应用程序中的使用提供了支持
  • SpringORM:对主流ORM框架(Hibernate、Toplink 等)进行集成
  • Spring Context:Spring上下文,提供bean容器的集合
  • Spring AOP:基于SpringCore的符合规范的其外面编程的实现
  • SpringJDBC:提供了JDBC的抽象层,简化了JDBC编码

4、常用Spring生态项目:

  • Spring Boot:简化 Spring 应用开发,通过 "自动配置" 减少 XML 配置,内置服务器(如 Tomcat),支持快速构建独立运行的应用。
  • Spring Cloud:基于 Spring Boot 的微服务框架,提供服务注册与发现、配置中心、负载均衡等分布式系统解决方案。
  • Spring Data:简化数据访问层开发,支持多种数据库(MySQL、MongoDB 等),通过统一接口减少重复代码。
  • Spring Security:处理认证与授权,保护应用程序安全

二、Spring环境搭建

1、添加坐标(pom.xml)添加spring-context依赖

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

2、创建主配置文件(bean.xml 导入依赖后才会出现)

三、Spring IOC / DI

1、IOC含义:

IOC:(Inversion of Control:控制反转)是Spring框架的核心思想之一。

作用:主要用于解耦,提高灵活度,IOC是指将创建对象的控制权转移给Spring框架进行管理,由Spring框架根据配置文件或注解方式,创建bean对象并管理各个bean对象之间的依赖关系,使对象之间形成松散耦合的关系,实现解耦

  • 控制:指的是对象创建(实例化,管理)的权利
  • 反转:控制权交给外部环境(Spring框架,IOC容器)

2、IOC使用步骤:

(1)将类注入,SpringIOC容器(xml配置,注解实现)

<bean id="唯一标识" class="实现类的完全限定名称"></bean>

(2)加载Spring主配置文件:

①. 接口

ApplicationContext(接口子): 多例

BeanFactory(父接口):单例

②. 实现类:

ClassPathXmlApplicationContext(实现类):通过加载配置文件的相对路径获取容器对象

FileSystemXmlApplicationContext(实现类):通过加载配置文件的绝对路径获取容器对象

AnnotationConfig Application Context(实现类):通过加载配置类获取容器对象

3、DI含义:

DI : (dependency inject : 依赖注入)是对IOC概念的不同角度的描述,是指应用程序再运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象

作用:胶水,帮助spring IOC容器,把有依赖关系的javaBean对象粘合在一起

4、DI使用步骤:

实现方式:
(1)set 注入:
  • 提供set 方法
  • 配置xml <ean>子标签<property name =''类属性'' 属性名=“属性值”></property>
    // 属性:
    // name=======>属性名
    // value======>属性值
    // ref========>属性值的引用
    <bean id="controllerImp" class="com.ape.controller.AccountControllerImpl">--><property name="service" ref="serviceImp"/>--></bean>
(2) 构造方法注入
  • 提供构造方法
  • 配置xml <bean>子标签<constructor-arg 属性名="属性值" value=“ ”/>
// 属性:
// name=======>构造方法参数名
// type======>构造方法参数类型
// index========>构造方法参数的下标<bean id="controllerImp" class="com.ape.controller.AccountControllerImpl"><constructor-arg name="sname" value="张三"/></bean>
(3) 属性注入:(一般不用)

四、Spring 对Bean的管理

1、bean的创建(选其一)

  • 通过反射调用类的无参构造
  • 通过指定的工厂,创建bean对象
  • 通过指定的工厂的静态方法创建bean对象
<!--     ============================== bean创建的三种方法注入 ====================            -->
<!--     ============================== 1 默认无参创建 ======================            -->
<bean id ="singer" class="com.ape.bean.Singer1"></bean><!--     ============================== 2 工厂创建 ======================            --><bean id ="singer" class="com.ape.bean.Singer1" factory-bean="singerFactory" factory-method="createSinger"></bean><bean id ="singerFactory" class="com.ape.factory.Singerfactory"></bean><!--     ============================== 2 静态工厂创建 ======================      createSinger为静态方法       --><bean id ="singer" class="com.ape.factory.SingerStaticFactory"  factory-method="createSinger"></bean>

2、bean 的作用域 (bean的创建方式)

  • 含义:bean的创建方式
  • 语法:<bean scope="属性值"></bean>
  • 属性值: singleton: 默认单例 prototype 多例 request:一次请求new一个对象 session 一个会话new一个对象
<!- beande 作用域  singleton 单例  prototype 多例 request 一次请求  session 一次会话  globalSession 全局会话 默认是singleton ============            -->
<bean id="animal" class="com.ape.bean.Animal" scope="singleton"></bean>

3、bean的生命周期

(1)、实例化:创建对象
(2)、初始化:
  • 接口初始化 实现 implements InitalizingBean 接口
  • 属性初始化 自定义方法 还需要再配置文件<bean>标签中添加 init-method =“方法名”
(3)、操作使用
(4)、销毁了
  • 接口销毁了: 实现 implements DisposableBean 接口
  • 属性销毁了:自定义方法还需要再配置文件<bean>标签中添加 distory-method =“方法名”
<!--     ============================== bean生命周期 ======================            -->
<!--     ==============================bean生命周期 ======================            -->
<!--    接口方式    --><bean  id="tea" class="com.ape.bean.Teacher1"></bean>
<!--    属性方法方式-->
<bean id="tea" class="com.ape.bean.Teacher1" init-method="doinit" destroy-method="dodispose"></bean>
package com.ape.bean;import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;public class Teacher1 implements InitializingBean, DisposableBean {private String name;private int age;private String subject;public Teacher1() {System.out.println("===>生命周期:实例化");}//接口方式实现两个接口类的方法@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("====》生命周期初始化");}@Overridepublic void destroy() throws Exception {System.out.println("===》生命周期----销毁了");}//    属性方式方法public void doinit(){System.out.println("===>doinit方法初始化");}public void dodispose(){System.out.println("===》dodispose方法销毁了");}
}

五、Spring的注解的使用

1、Spring的发展

  • spring2.5前==xml
  • spring2.5后==xml+annotation(优化代码)
  • spring3.0后==annotation+JavaConfig配置类

2、注解的使用:

(1)、注入类:使用@compone注解标注在类上替换掉之前的xml写法

①语法:@Component(value="注入容器中的id,如果省略id为类名且首字母小写,value属性名称可以省略")

②举例:

<bean id="user" class="com.apesource.包.User"></bean>
等价于
@Component
Class User{}

③注意:

  • @Component不能单独使用,要配合包扫描使用
  • <context:component-scan base-package=""></context:component-scan> //设置包扫描才能扫到注入的此包下的类
  • @Repository====》注入数据访问层
  • @Service========>注入业务层
  • @Controller=====>注入控制层
  • 以上三个注解与@Component功能语法一
(2)、注入数据:
方式一:
@value :修饰成员变量
  • 含义:注入基本数据与String
  • 替换:<property></property>
  • 语法:@Value("数据内容") @Value("${动态获取}")
  • 不能单独用,配合加载配置文件标签:
  • <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
方式二:
@Autowired:修饰成员变量注入javaBean
  • 语法:@Autowired(required = "true-默认、false、是否必须进行装配")
  • 含义:注入javaBean
  • 注意:默认是按照类型装配,如果容器中有多个类型,则会自动切换为名称装配,若没有该名称,会报NoUniqueBeanDefinitionException异常,如果没有该类型会报NoSuchBeanDefinitionException异常
(3)、其他注解:
1、@Primary 类上
  • 含义:首选项,当类型冲突的情况下,此注解修饰的类被列为首选(备胎扶正)
  • 修饰:类
  • 注意:不能单独使用,必须与@Component....联合使用
2、@Qualifier(value="名称") 装配javaBean属性时
  • 含义:按照名称装配
  • 修饰:成员变量
  • 注意:不能单独使用,必须与@Autowired联合使用
3、@Resource(name="名称") jdk自带的注解 javabean属性
  • 含义:按照名称装配
  • 修饰:成员变量
  • 注意:单独使用
4、@Scope 作用域 修饰类
  • 含义:配置类的作用域
  • 修饰:类
  • 注意:不能单独使用,必须与@Component....联合使用
  • @Scope("prototype")
    @Scope("singleton")
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
    //标注在类上
    public class test(){}
(4)、配置类注解:

@Configuration:标记为配置类

@ComponentScan(basePackages = "com.ape") :包扫描

@PropertySource(value = "classpath:message.properties"):加载配置文件properties

@Import(DateSourceConfig.class):加载另一个配置类

@Bean:注入类可以注入系统类

http://www.dtcms.com/a/488370.html

相关文章:

  • 洛阳响应式建站wordpress无法搜索插件
  • 幻灯片在什么网站做dw做的静态网站怎么分享链接
  • 做网站如何推销小公司做网站的好处
  • 力扣Hot100--106.对称二叉树
  • 胡恩全10.15作业
  • 网站推广需要多少钱教学网站开发源码
  • ACSM-CPT 8周冲刺每日学习计划(10/16–12/15)
  • 公司备案网站名称代理ip注册网站都通不过
  • 杭州建设银行网站智慧团建登录不上
  • 大型商城网站开发wordpress侧边栏加图片
  • Linux内核架构浅谈37-深入理解Linux页帧标志:从PG_locked到PG_dirty的核心原理与实践
  • 建设网站的功能及目的是什么wordpress好用的地图
  • 佛山找企业的网站WORDPRESS添加前台会员注册
  • 【完整源码+数据集+部署教程】 【零售和消费品&存货】条形码检测系统源码&数据集全套:改进yolo11-TADDH
  • 上海建网站公司排名常用的设计软件有哪些
  • 10、一个简易 vector:C++ 模板与 STL
  • 营销网站设计网站获取访客qq 原理
  • Aosp14桌面壁纸和锁屏壁纸的设置和加载分析
  • 作业1.1
  • 减肥养生网站建设360极速浏览器网站开发缓存
  • 网站开发人员资质北京汽车网站建设
  • 网站模板修改教程活动推广文案
  • 专门做旅行用品的网站沈阳市浑南区城乡建设局网站
  • 哪一个景区网站做的最成熟wordpress loop count
  • JDK高版本特性总结与ZGC实践
  • 搜索优化整站优化在线阅读网站开发教程
  • 网站免费正能量小说爱网之家
  • 网站建设数据库系统网站开发api平台
  • 信管女生做网站开发兰州大学网页与网站设计
  • Unet-初探