Spring 中 @Bean 注解用法大全,建议收藏!

🏰 365bet手机在线投注 📅 2025-12-12 23:46:22 👤 admin 👁️ 2326 👑 115
Spring 中 @Bean 注解用法大全,建议收藏!

存储Bean对象

将对象存储在 Spring 中,有两种注解类型可以实现:

类注解:@Controller、@Service、@Repository、@Component、@Configuration

方法注解:@Bean

@Controller(控制器存储)

Spring Boot 基础就不介绍了,推荐看这个实战项目:

https://github.com/javastacks/spring-boot-best-practice

如下使用@Controller存储Bean代码:

@Controller

public class UserController {

public void SayHi(String name){

System.out.println("你好"+name);

}

}

使用获取上下文的方法获取上面存储的对象

public class Test {

public static void main(String[] args) {

//获取spring上下文

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");

//获取指定的Bean对象名称+类型进行获取

UserController userController = (UserController) applicationContext.getBean("userController");

userController.SayHi("zcx");

}

}

效果为

@Service(服务存储)

如下使用@Service存储Bean代码:

@Service

public class UserService {

public void SayHi(String name){

System.out.println("你好"+name);

}

}

输出结果跟@Controller一样

@Repository(仓库存储)

如下使用@Repository存储Bean代码:

@Repository

public class UserRepository {

public void SayHi(String name){

System.out.println("你好"+name);

}

}

@Component(组件存储)

如下使用@Component存储Bean代码:

@Component

public class UserComponent {

public void SayHi(String name){

System.out.println("你好"+name);

}

}

@Configuration(配置存储)

如下使用@Configuration存储Bean代码:

@Configuration

public class UserConfiguration {

public void SayHi(String name){

System.out.println("你好"+name);

}

}

需要这么多类注解是让程序员看到类注解之后,就能直接了解当前类的⽤途,比如:

@Controller:表示的是业务逻辑层

@Servie:表示的是服务层

@Repository:表示的是持久层

@Configuration:表示的是配置层

推荐一个开源免费的 Spring Boot 实战项目:

https://github.com/javastacks/spring-boot-best-practice

Bean

⽅法注解是放到某个⽅法上的要配合类注解使⽤,如以下代码的实现:

@Controller

public class Users {

@Bean

public User user1(){

User user = new User();

return user;

}

}

public class Test {

public static void main(String[] args) {

//获取spring上下文

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");

//获取指定的Bean对象名称+类型进行获取

User user = (User) applicationContext.getBean("user1");

user.sayHi("zcx");

}

}

user类

@Component

public class User {

public void sayHi(String name){

System.out.println(name+"你好");

}

}

结果

重命名Bean

可通过设置 name 属性给 Bean 对象进⾏重命名操作

@Bean(name = {"u1", "us1"})

public User user1() {

User user = new User();

return user;

}

或者

@Bean(name = {"u1", "us1"})

public User user1() {

User user = new User();

return user;

}

获取Bean对象

获取Bean对象就是把对象取出来放入某个类中,也叫对象注入或者对象装配。

对象注入有三种实现方法:

属性注⼊

构造⽅法注⼊

Setter 注⼊

下⾯我们按照实际开发中的模式,将 Service 类注⼊到 Controller 类中

属性注入

属性注⼊是使⽤ @Autowired 实现的,实现代码如下:

@Service

public class UserService {

public User user1(){

User user = new User();

return user;

}

}

@Controller

public class UserController {

@Autowired

private UserService userService;

public User getUser(){

return userService.user1();

}

}

public class Test {

public static void main(String[] args) {

//获取spring上下文

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");

//获取指定的Bean对象名称+类型进行获取

UserController userController = applicationContext.getBean(UserController.class);

userController.getUser().sayHi("zcx");

}

}

构造方法注入

构造⽅法注⼊是在类的构造⽅法中实现注⼊,实现代码如下:

@Controller

public class UserController {

private UserService userService;

@Autowired

public UserController(UserService userService) {

this.userService = userService;

}

public User getUser(){

return userService.user1();

}

}

其余代码写法跟属性注入一样

Setter注入

在设置 set ⽅法的时候需要加上 @Autowired 注解

@Controller

public class UserController {

private UserService userService;

@Autowired

public void SetUserController(UserService userService) {

this.userService = userService;

}

public User getUser(){

return userService.user1();

}

}

@Resource(注入关键字)

@Controller

public class UserController {

@Resource

private UserService userService;

public User getUser(){

return userService.user1();

}

}

使用@Resource 可以解决同⼀类型多个 Bean 报错问题

可以如下设置方法名

@Resource(name = "user1")

@Autowired 和 @Resource 的区别

出身不同:@Autowired 来⾃于 Spring,⽽ @Resource 来⾃于 JDK 的注解

使⽤时设置的参数不同:相⽐于 @Autowired 来说,@Resource ⽀持更多的参数设置,例如name 设置,根据名称获取 Bean

@Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊,⽽ @Resource 只能⽤于 Setter 注⼊和属性注⼊,不能⽤于构造函数注⼊

来源:blog.csdn.net/st200112266/article/details/131875625

更多文章推荐:

1.Spring Boot 3.x 教程,太全了!

2.2,000+ 道 Java面试题及答案整理(2024最新版)

3.《Java开发手册(嵩山版)》最新发布!

觉得不错,别忘了随手点赞+转发哦!

皇家推荐

什么时候去贵州旅游最好
Microsoft365个人版

什么时候去贵州旅游最好

📅 11-10 👁️ 7413
如何轻松为台式电脑安装蓝牙设备?
365bet手机在线投注

如何轻松为台式电脑安装蓝牙设备?

📅 11-02 👁️ 6895
送男生什么花合适?有哪些含义?
365bet手机在线投注

送男生什么花合适?有哪些含义?

📅 08-25 👁️ 5596
王字旁的字大多与什么有关?汉字偏旁揭秘与文化内涵解析
免费版的Excel在哪里下载?哪个电脑表格软件最好用?-BIM免费教程
《魔兽世界》厚皮获得方法
Microsoft365个人版

《魔兽世界》厚皮获得方法

📅 07-15 👁️ 7196