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

打印 上一主题 下一主题

主题 847|帖子 847|积分 2541

存储Bean对象

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

  • 类注解:@Controller、@Service、@Repository、@Component、@Configuration
  • 方法注解:@Bean
@Controller(控制器存储)

Spring Boot 基础就不介绍了,推荐看这个实战项目:
https://github.com/javastacks/spring-boot-best-practice
如下使用@Controller存储Bean代码:
  1. @Controller
  2.         public class UserController {
  3.         public void SayHi(String name){
  4.         System.out.println("你好"+name);
  5.     }
  6. }
复制代码
使用获取上下文的方法获取上面存储的对象
  1. public class Test {
  2.     public static void main(String[] args) {
  3.         //获取spring上下文
  4.      ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
  5.     //获取指定的Bean对象名称+类型进行获取
  6.       UserController userController =  (UserController) applicationContext.getBean("userController");
  7.       userController.SayHi("zcx");
  8.     }
  9. }
复制代码
效果为

@Service(服务存储)

如下使用@Service存储Bean代码:
  1. @Service
  2. public class UserService {
  3.     public void SayHi(String name){
  4.         System.out.println("你好"+name);
  5.     }
  6. }
复制代码
输出结果跟@Controller一样
@Repository(仓库存储)

如下使用@Repository存储Bean代码:
  1. @Repository
  2. public class UserRepository {
  3.     public void SayHi(String name){
  4.         System.out.println("你好"+name);
  5.     }
  6. }
复制代码
@Component(组件存储)

如下使用@Component存储Bean代码:
  1. @Component
  2. public class UserComponent {
  3.     public void SayHi(String name){
  4.         System.out.println("你好"+name);
  5.     }
  6. }
复制代码
@Configuration(配置存储)

如下使用@Configuration存储Bean代码:
  1. @Configuration
  2. public class UserConfiguration {
  3.     public void SayHi(String name){
  4.         System.out.println("你好"+name);
  5.     }
  6. }
复制代码
需要这么多类注解是让程序员看到类注解之后,就能直接了解当前类的⽤途,比如:

  • @Controller:表示的是业务逻辑层
  • @Servie:表示的是服务层
  • @Repository:表示的是持久层
  • @Configuration:表示的是配置层
推荐一个开源免费的 Spring Boot 实战项目:
https://github.com/javastacks/spring-boot-best-practice
Bean

⽅法注解是放到某个⽅法上的要配合类注解使⽤,如以下代码的实现:
  1. @Controller
  2. public class Users {
  3.     @Bean
  4.     public User user1(){
  5.         User user = new User();
  6.         return user;
  7.     }
  8. }
  9. public class Test {
  10.     public static void main(String[] args) {
  11.         //获取spring上下文
  12.      ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
  13.     //获取指定的Bean对象名称+类型进行获取
  14.     User user =  (User) applicationContext.getBean("user1");
  15.       user.sayHi("zcx");
  16.     }
  17. }
复制代码
user类
  1. @Component
  2. public class User {
  3.     public void sayHi(String name){
  4.         System.out.println(name+"你好");
  5.     }
  6. }
复制代码
结果

重命名Bean
可通过设置 name 属性给 Bean 对象进⾏重命名操作
  1. @Bean(name = {"u1", "us1"})
  2. public User user1() {
  3. User user = new User();
  4. return user;
  5. }
复制代码
或者
  1. @Bean(name = {"u1", "us1"})
  2. public User user1() {
  3. User user = new User();
  4. return user;
  5. }
复制代码
获取Bean对象

获取Bean对象就是把对象取出来放入某个类中,也叫对象注入或者对象装配。
对象注入有三种实现方法:

  • 属性注⼊
  • 构造⽅法注⼊
  • Setter 注⼊
下⾯我们按照实际开发中的模式,将 Service 类注⼊到 Controller 类中
属性注入

属性注⼊是使⽤ @Autowired 实现的,实现代码如下:
  1. @Service
  2. public class UserService {
  3.     public User user1(){
  4.         User user = new User();
  5.         return user;
  6.     }
  7. }
  8. @Controller
  9. public class UserController {
  10.     @Autowired
  11.     private UserService userService;
  12.     public User getUser(){
  13. return userService.user1();
  14.     }
  15. }
  16. public class Test {
  17.     public static void main(String[] args) {
  18.         //获取spring上下文
  19.         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
  20.         //获取指定的Bean对象名称+类型进行获取
  21.         UserController userController = applicationContext.getBean(UserController.class);
  22.       userController.getUser().sayHi("zcx");
  23.     }
  24. }
复制代码

构造方法注入

构造⽅法注⼊是在类的构造⽅法中实现注⼊,实现代码如下:
  1. @Controller
  2. public class UserController {
  3.     private UserService userService;
  4.     @Autowired
  5.     public UserController(UserService userService) {
  6.         this.userService = userService;
  7.     }
  8.     public User getUser(){
  9. return userService.user1();
  10.     }
  11. }
复制代码
其余代码写法跟属性注入一样
Setter注入

在设置 set ⽅法的时候需要加上 @Autowired 注解
  1. @Controller
  2. public class UserController {
  3.     private UserService userService;
  4.     @Autowired
  5.     public void SetUserController(UserService userService) {
  6.         this.userService = userService;
  7.     }
  8.     public User getUser(){
  9. return userService.user1();
  10.     }
  11. }
复制代码
@Resource(注入关键字)
  1. @Controller
  2. public class UserController {
  3.     @Resource
  4.     private UserService userService;
  5.     public User getUser(){
  6. return userService.user1();
  7.     }
  8. }
复制代码
使用@Resource 可以解决同⼀类型多个 Bean 报错问题
可以如下设置方法名
  1. @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开发手册(嵩山版)》最新发布!
觉得不错,别忘了随手点赞+转发哦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表