利用注解进行 Spring 开发
时间:2022-07-23
本文章向大家介绍利用注解进行 Spring 开发,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
- 1. Bean 注入
- 2. 属性注入
- 3. 基于 Java 类配置
1. Bean 注入
之前的学习中都是利用 XML 配置中的 bean
标签来进行 Bean 的注入,现在来学习一下如何利用注解实现 Bean 注入。
- 首先需要在 Spring 的配置文件(一般是
applicationContext.xml
)中配置需要扫描的注解
<context:component-scan base-package="com.cunyu.pojo"/>
- 然后在要扫描的包中编写实体类,同时加上注解
package com.cunyu.pojo;
import org.springframework.stereotype.Component;
/**
* @author : cunyu
* @version : 1.0
* @className : User
* @date : 2020/7/18 10:21
* @description : TODO
*/
// 相当于 XML 配置文件中的 <bean id="user" class="com.cunyu.pojo.User"/>
@Component("user")
public class User {
private String name;
public User() {
name = "村雨遥";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 进行单元测试
package com.cunyu.pojo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author : cunyu
* @version : 1.0
* @className : UserTest
* @date : 2020/7/18 10:22
* @description : TODO
*/
public class UserTest {
@Test
public void test() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
System.out.println(user.getName());
}
}
@Component
在不同的层又可以衍生出其他三个注解,其功能和 @Component
一样,只是为了更好地分层。
-
@Controller
:一般用在 Web 层,前端访问控制器 -
@Service
:一般用在 Service 层,数据服务层,业务代码 -
@Repository
:一般用在 Dao 层,数据访问成
2. 属性注入
要实现属性的注入,可以用 @Value
注解,此时不需要提供 set
方法即可实现;
- 同 Bean 注入,配置需要扫描的包
- 给属性添加注解
package com.cunyu.pojo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author : cunyu
* @version : 1.0
* @className : User
* @date : 2020/7/18 10:21
* @description : TODO
*/
@Component("user")
public class User {
// 相当于 XML 配置中的 <property name="name" value="村雨遥"/>
@Value("村雨遥")
private String name;
public String getName() {
return name;
}
}
- 单元测试同 Bean 注入
注意: 属性注入可以不提供 set
方法,但如果提供了 set
方法,也是可以的,此时相当于给该属性提供默认值;
package com.cunyu.pojo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author : cunyu
* @version : 1.0
* @className : User
* @date : 2020/7/18 10:21
* @description : TODO
*/
@Component("user")
public class User {
private String name;
public String getName() {
return name;
}
@Value("村雨遥")
public void setName(String name) {
this.name = name;
}
}
此时可以通过 set
方法进行属性值的设置;
package com.cunyu.pojo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author : cunyu
* @version : 1.0
* @className : UserTest
* @date : 2020/7/18 10:22
* @description : TODO
*/
public class UserTest {
@Test
public void test() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
// 输出默认值 "村雨遥"
System.out.println(user.getName());
user.setName("小鱼");
// 输出设置后的值 "小鱼"
System.out.println(user.getName());
}
}
3. 基于 Java 类配置
前面已经介绍了基于 XML 的配置和基于注解的配置,现在来了解下基于 Java 类配置。
- 首先准备一个实体类
package com.cunyu.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author : cunyu
* @version : 1.0
* @className : User
* @date : 2020/7/18 10:21
* @description : TODO
*/
@Component
public class User {
private String name;
public String getName() {
return name;
}
@Value("村雨遥")
public void setName(String name) {
this.name = name;
}
}
- 编写配置类
package com.cunyu.config;
import com.cunyu.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author : cunyu
* @version : 1.0
* @className : UserConfig
* @date : 2020/7/18 11:14
* @description : TODO
*/
// 表明该类是一个配置类
@Configuration
public class UserConfig {
// 通过方法来注册一个 Bean,方法名对应 bean 标签中的 id,方法返回值对应 Bean 的类型
@Bean
public User user() {
return new User();
}
}
- 单元测试
package com.cunyu.pojo;
import com.cunyu.config.UserConfig;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @author : cunyu
* @version : 1.0
* @className : UserTest
* @date : 2020/7/18 10:22
* @description : TODO
*/
public class UserTest {
@Test
public void test() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(UserConfig.class);
User user = (User) applicationContext.getBean("user");
System.out.println(user.getName());
user.setName("小雨");
System.out.println(user.getName());
}
}
- Git基础命令使用(个人总结)
- Centos搭建Docker环境
- Consul Config 使用Git做版本控制的实现
- 让XP支持4G内存
- Consul微服务的配置中心体验篇
- 如何使用Sentry实现Hive/Impala的数据脱敏
- 如何使用Oozie API接口向Kerberos环境的CDH集群提交Shell作业
- Docker下redis的主从、持久化配置
- vuejs、eggjs、mqtt全栈式开发设备管理系统
- Xss和Csrf介绍
- GraphQL介绍&使用nestjs构建GraphQL查询服务
- 使用auth_request模块实现nginx端鉴权控制
- Docker学习之Docker镜像基本使用
- Docker学习之Centos7下安装
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 一个案例彻底弄懂如何正确使用 mysql inndb 联合索引
- 一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind
- matlab结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct
- PHP函数参数传递方法的具体改进技巧
- matlab学习笔记11_3 高维数组处理 filp, shiftdim, size, permute, ipermute
- 看完这篇文章,你的Linux基础就差不多了
- jzy3D从入门到弃坑
- git丢弃本地修改的所有文件(新增、删除、修改)
- Jmetal设置Solution Variables
- git log 查看某文件的修改历史
- 进程和线程的概念、区别和联系
- CDATA和转义字符
- 递归解决全排列问题
- 支付的时候的参数校验
- PHP函数库之BC高精确度函数库