@Configuration
这个标签主要功能是加载spring所需的包,用于定义配置类,可替换xml配置文件
@ComponentScan(basePackages= "com.huoxin.order")
这个标签主要功能是扫描指定包下的所有方法以及扫描注入类
@EnableAspectJAutoProxy(proxyTargetClass=true)
开启AspectJ 自动代理模式,如果不填proxyTargetClass=true,默认为false
这里说明一下spring支持两种动态代理,默认是false 对应JDK动态代理, true对应GCLib动态代理(GCLib别jdk效率高10倍左右)
@controller 控制器(注入服务)
@service 服务(注入dao)
@repository(实现dao访问)
@component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>
)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
案例:
<context:component-scan base-package=”com.*”>
上面的这个例子是引入Component组件的例子,其中base-package表示为需要扫描的所有子包。
共同点:被@controller 、@service、@repository 、@component 注解的类,都会把这些类纳入进spring容器中进行管理
@Aspect(标示这是一个切面 通常和@component 和 @Pointcut 以及 @Around 配合使用)
@Pointcut("execution(* com.huoxin.psc.order.api.OrderServiceImpl.*(..))") 指定一个切面的路径
@Around("方法名")
这里的切面一般做公共处理的操作 比如 日志打印处理 上面的路径就是当前路径下的逻辑代码都可以走这个日志切面方法
下面给个例子
其实这也充分说明了spring核心机制之一 AOP
@EnableTransactionManagement // 启注解事务管理,等同于xml配置方式的 <tx:annotation-driven />
@Transactional 在要增加事物的方法上增加就可以 和上面的@EnableTransactionManagement联合使用
@Autowired 按类型注入(比如两个类名字一样但是参数不一样 用Autowired 注入就算名称相同也可以注入 可以和@Qualifier(userServiceImpl)配合使用 这样联合用的效果和@resource是一样的)
@Resource 按名称注入 (不通名称即可)
@lazy 表示在spring启动时可以让某个类不进行初始化(默认是 lazy-init=false 表示初始化加载全部类 当然要有上面的各种层的标识@bean等等 如果改变为true则这个类在启动spring时候就不会加载 而是在调用的时候在去初始化)
@HttpService 标识服务层可以通过http访问(比如postman 当然要配合 @HttpServiceMethod(URI = "/huoxin/index")使用)
到这里就差不多了基本上常用的都在这里,其实这些标签足以体现spring的 AOP 和 IOC 就这点东西