文章目录
- 一、使用注解开发的环境准备
- 二、Spring 框架核心注解学习
- 2.1 @Component
- 2.1.1 通过注解来控制 Bean 的作用域(@Scope)
- 2.2 @Component 的派生注解(对应这 web 开发的三层架构分层)
- 2.2.1 @Repositor
- 2.2.2 @Service
- 2.2.3 @Controller
- 三、使用 XML 与注解开发的学习总结
- 四、使用 JAVA 的方式配置 Spring (XML 被完全取代成注解开发)
- 4.1 Spring 上下文学习总结
一、使用注解开发的环境准备
在 Spring 4.0版本之后,如果想要使用注解进行开发,就必须保证 aop 的依赖包正常导入了。否则可能会导致一些注解无法正常使用。
-
使用注解开发的环境准备,搭建 maven 项目
-
在pom.xml 中导入 Spring 依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.0.RELEASE</version></dependency>
- 依赖导入成功示意图
- 依赖导入成功示意图
-
创建文件包路径,controller、dao、dto、service
-
创建 applicationContext.xml(Beans.xml),使用注解开发时,需要在该资源文件中导入约束,配置注解的支持!
- 注:通过下面的 xml 代码可以发现,在该容器中只配置了注解支持,以及扫描指定包路径的注解,使其生效,并没有做 Bean 的任何处理。
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启注解的支持:注解驱动,不开启则注解不生效 --><context:annotation-config/><!-- 指定需要扫描的包,使该包下的注解生效 --><context:component-scan base-package="com.sys.dto"/> </beans>
-
创建 User 实体类,引用注解对 Bean 进行装配
// @Component:等同于<bean id="user" class="com.sys.dto.User"/> @Component public class User {// @Value:等同于<property name="name" value="姚青"/>@Value("姚青")private String name;public String getName() {return name;}/* 注:在使用这种方式进行 Bean 的装配时,其实并没有使用过Set(),都是通过 @Value 直接注入到 private String name; 当中*/public void setName(String name) {this.name = name;}}
-
创建测试类,测试 Bean 的装配结果
public class MyTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");User user = context.getBean("user", User.class);System.out.println(user.getName());} }
-
测试结果:从结果可以看出Bean成功注入了
-
-
注:在开发中大多数时候都是需要使用注解来进行的。
二、Spring 框架核心注解学习
在上面第一节中的使用到了 @Component ,以及 @Value 注解来实现 Bean 的装配。
2.1 @Component
@Component 是 Spring 框架中用来标记一个类为组件的注解。被 @Component 注解标记的类将会被 Spring 自动扫描并纳入到 Spring 容器中管理。
- 使用方式:如第一节所示
2.1.1 通过注解来控制 Bean 的作用域(@Scope)
-
@Scope :用于定义Spring容器中Bean的作用域范围,它可以应用在类级别上。作用域决定了在Spring容器中创建的Bean的生命周期和可见范围。
-
常用的@Scope作用域:
-
singleton(默认):每个Spring容器中只会创建一个Bean实例,并在整个容器的生命周期内都共享这个实例。
-
prototype:每次从容器中获取Bean时都会创建一个新的实例,即原型模式。每次获取都返回一个独立的Bean实例。
-
request:每个HTTP请求都会创建一个新的Bean实例,在同一次请求中共享。
-
session:每个HTTP session都会创建一个新的Bean实例,在同一个session中共享。
-
application:在Web应用启动时创建一个Bean实例,并在整个Web应用的生命周期内共享。
-
-
代码示例:
// @Component:等同于<bean id="user" class="com.sys.dto.User"/> @Component @Scope("singleton") public class User {// @Value:等同于<property name="name" value="姚青"/>@Value("姚青")private String name;public String getName() {return name;}/* 注:在使用这种方式进行 Bean 的装配时,其实并没有使用过Set(),都是通过 @Value 直接注入到 private String name; 当中*/public void setName(String name) {this.name = name;}}
-
-
注:作用域仅在容器中有效,而不影响Bean在其他代码中的使用。
2.2 @Component 的派生注解(对应这 web 开发的三层架构分层)
@Component 注解有几个派生注解,它们的作用和使用方式类似,都是代表将某个类注册到Spring中,装配Bean。但具体含义略有差异,涉及到不同场景下的注入、管理和特定功能。
这些派生注解分别是:@Repository、@Service、@Controller
2.2.1 @Repositor
-
@Repositor: 用于标记数据访问层的组件,通常用于访问数据库或其他数据源。
- 使用方式:
@Repository public class UserRepository {//... }
- 使用方式:
2.2.2 @Service
-
@Service: 用于标记服务层的组件,通常用于定义业务逻辑。
- 使用方式:
@Service public class UserService {//... }
- 使用方式:
2.2.3 @Controller
-
@Controller: 用于标记Web层的组件,通常用于处理HTTP请求、响应和视图。
- 使用方式:
@Controller public class UserController {//... }
- 使用方式:
三、使用 XML 与注解开发的学习总结
-
XML 与注解
-
通过 xml 来实现 Bean 的装配时,任何场景都可以适配!并且维护简单明了。
-
通过注解来实现 Bean 的装配时,局限性较大,如果不是自己的类就无法使用!维护相对复杂。
-
-
XML 与注解的最佳搭配方式:
-
XML 用来管理bean;
-
注解只负责完成属性的注入;
-
-
注:在使用的过程中,需要注意必须让注解生效,也就是需要开启注解的支持
四、使用 JAVA 的方式配置 Spring (XML 被完全取代成注解开发)
使用注解将 XML 完全替代,这种写法是 Spring 框架的子项目 JavaConfig 的一种开发模式,将 Bean 的装配以及管理全部交给 Java 来实现!并且在 Spring 4.0 之后,JavaConfig 也成为了Spring 的一个核心功能。
这种纯Java的配置方式,在 SpringBoot 中随处可见!
-
@Component :标注一个类为 Spring 容器的 Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的)
-
@Configuration :这个也会Spring容器托管,注册到容器中,因为它本来就是一个@Component。被该注解标记的类被代表成配置类,和之前的 Beans.xml 差不多
-
@Bean :是 Spring 框架中用来定义 Bean 的注解之一。通过在方法上添加 @Bean 注解,相当于告诉 Spring 容器通过调用该方法来创建并管理一个 Bean 实例。相当于之前在 Beans.xml中 写的 < bean > 标签
- 该方法的方法名就相当于< bean > 标签的 id 属性
- 该方法的返回值,就相当于< bean >标签的 class 属性
-
@ComponentScan :指定要扫描的包,相当于 Beans.xml 的< context:component-scan base-package=“包路径”/ >
-
@Import :将其他配置文件引入到当前配置文件中,相当于 Beans.xml 的< import resource=“XXX”/ >
-
代码示例:创建 maven 项目以及相关包路径
-
创建实体类
@Component public class User {@Value("姚青")private String name;public String getName() {return name;}}
-
创建JavaConfig 配置类
@Configuration public class DemoConfig {@Beanpublic User getUser(){return new User(); // 返回要注入到 bean 的对象!}}
-
创建测试类
public class MyTest {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(DemoConfig.class);User user = context.getBean("getUser", User.class);System.out.println(user.getName());}}
-
测试结果 :注入成功~~(打印姚青)
-
4.1 Spring 上下文学习总结
-
ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
- 在之前使用 Beans.xml 进行 Bean 的管理和注入时,就通过 ClassPathXmlApplicationContext 来进行 Bean 的获取。
-
ApplicationContext context = new AnnotationConfigApplicationContext(DemoConfig.class);
- 在之前使用注解进行 Bean 的管理和注入时,就通过 AnnotationConfigApplicationContext 来进行 Bean 的获取。