概述
详细说明Spring注解 之 @Component
@Component
是一个元注解,意思是可以注解其他类注解。
如@Controller @Service @Repository @Aspect
官方的原话是:带此注解的类看为组件,当使用基于注解的配置和类路径扫描的时候,这些类就会被实例化。
其他类级别的注解也可以被认定为是一种特殊类型的组件,比如@Repository @Aspect
。所以,@Component
可以注解其他类注解。
个人理解:
@Component
:定义Spring管理Bean,把当前这个类交给Spring管理
举个例子:
当使用@Aspect 必须使用@Component
来使@Aspect
生效
@Aspect
风格的切面可以通过@Compenent
注解标识其为Spring管理Bean,而@Aspect
注解不能被Spring自动识别并注册为Bean,必须通过@Component注解来完成
代码示例如下:
@Component
@Aspect
public class TestAspect {
@Pointcut(value="execution(* *(..))")
private void pointcut() {}
@Before(value="pointcut()")
public void before() {
System.out.println("=======before");
}
}
类指定方式:
1.不指定bean的名称,默认为类名首字母小写university
2.指定bean的名称
获取bean方式:
ApplicationContext ctx = new ClassPathXmlApplicationContext("./config/applicationContext.xml");
University ust = (University) ctx.getBean("university1");
@Repository:
@Component
扩展,被@Repository
注解的POJO类表示DAO层实现,从而见到该注解就想到DAO层实现,使用方式和@Component相同;
@Service:
@Component
扩展,被@Service注解的POJO类表示Service层实现,从而见到该注解就想到Service层实现,使用方式和@Component相同;
@Controller:
@Component扩展,被@Controller
注解的类表示Web层实现,从而见到该注解就想到Web层实现,使用方式和@Component
相同;
看源码你能发现这三个注解底层都实现了@Component
扩展
在使用Spring代理时,默认只有在public可见度的方法的@Transactional
注解才是有效的,其它可见度(protected、private
、包可见)的方法上即使有@Transactional
注解也不会应用这些事务属性的,Spring
也不会报错,如果你非要使用非公共方法注解事务管理的话,可考虑使用AspectJ。
Spring声明式事务实现其实就是Spring AOP
+ 线程绑定实现,利用AOP
实现开启和关闭事务,利用线程绑定(ThreadLocal
)实现跨越多个方法实现事务传播。
最后
以上就是开朗乌龟为你收集整理的Spring注解详细说明 之 @Component的全部内容,希望文章能够帮你解决Spring注解详细说明 之 @Component所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复