存储Bean对象
-
类注解:
@Controller
、@Service
、@Repository
、@Component
、@Configuration
-
方法注解:
@Bean
@Controller(控制器存储)
如下使用@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
:表示的是配置层
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
后端专属技术群 构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!
文明发言,以
交流技术
、职位内推
、行业探讨
为主广告人士勿入,切勿轻信私聊,防止被骗
加我好友,拉你进群
原文始发于微信公众号(Java知音):探秘 Spring 中 Bean 的注解宝典:解读存取 Bean 的相关注解及用法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154279.html