当前位置: 移动技术网 > IT编程>开发语言>Java > Spring中@Component与@Bean的区别

Spring中@Component与@Bean的区别

2019年09月18日  | 移动技术网IT编程  | 我要评论

@component和@bean的目的是一样的,都是注册bean到spring容器中。

 

@component  vs  @bean

  @component 和 它的子类型(@controller, @service and @repository)注释在类上。告诉spring,我是一个bean,通过类路径扫描自动检测并注入到spring容器中。

  @bean不能注释在类上,只能用于在配置类中显式声明单个bean。意思就是,我要获取这个bean的时候,spring要按照这种方式去获取这个bean。默认情况下@bean注释的方法名作为对象的名字,也可以用name属性定义对象的名字。

 

所有组件类型及其用途

组件注解 用途
标注最普通的组件
标注控制层(spring-mvc的注解)(如:*controller)
标注业务层(如:*service)
标注持久层(如:*dao)

所有组件类型都以相同的方式处理。子类型仅仅是标记,有利于代码可读性而不是特性。

 验证代码如下:

1 @controller
2 @requestmapping("/web")
3 public class webcontroller {
4     @responsebody
5     @requestmapping("/msg")
6     public string message(){
7         return "msg";
8     }
9 }
1 @component
2 @requestmapping("/web") 3 public class webcontroller { 4 @responsebody 5 @requestmapping("/msg") 6 public string message(){ 7 return "msg"; 8 } 9 }
1 @service
2 @requestmapping("/web")
3 public class webcontroller {
4     @responsebody
5     @requestmapping("/msg")
6     public string message(){
7         return "msg";
8     }
9 }

访问url=locahost:8080/web/msg,三段代码均返回字符串msg。(此web项目我自己用的端口8080)

 

@bean的使用

1 // just a pojo
2 public class messagebuilder {
3     public string getmsg(){
4         return "msgbuilder";
5     }
6 }
 1 import org.springframework.context.annotation.bean;
 2 import org.springframework.context.annotation.configuration;
 3 // let's turn the pojo into a bean
 4 @configuration
 5 public class appconfig {
 6     @bean
 7     public messagebuilder messagebuilder(){
 8         return new messagebuilder();
 9     }
10 }
 1 @controller
 2 @requestmapping("/web")
 3 public class webcontroller {
 4     // finally, hook it up
 5     @autowired
 6     private messagebuilder messagebuilder;
 7 
 8     @responsebody
 9     @requestmapping("/msg")
10     public string message(){
11         return messagebuilder.getmsg();
12     }
13 
14 }

 

参考文章:

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网