声明Bean的注解:

@Component :组件,没有明确的角色 标注Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean@Component(@Controller、@Service、@Repository)通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。

spring给所有service注解加日志_spring

@Service :在业务逻辑层(service层)使用

@Service本身是基于@Component注解的扩展,被@Service注解的POJO类表示Service层实现,从而见到该注解就想到Service层实现,使用方式和@Component相同;

spring给所有service注解加日志_缓存_02

@Repository :在数据访问层(dao层)使用.

@Repository本身是基于@Component注解的扩展,被@Repository注解的POJO类表示DAO层实现,从而见到该注解就想到DAO层实现,使用方式和@Component相同;

@Controller :在展现层(MVC--SpringMVC)使用
注入Bean的注解:

@Controller本身是基于@Component注解的扩展,被@Controller注解的类表示Web层实现,从而见到该注解就想到Web层实现,使用方式和@Component相同;

spring给所有service注解加日志_缓存_03

 

@Aautowired : Spring提供的注解.属于 Spring 的容器配置的一个注释,与它同属容器配置的注释还有:@Required,@Primary, @Qualifier 等等。因此 @Autowired 注释是一个用于容器 ( container ) 配置的注释。default-autowire,它是在xml文件中进行配置的,可以设置为byName、byType、constructor和autodetect;比如byName,不用显式的在bean中写出依赖的对象,它会自动的匹配其它bean中id名与本bean的set**相同的,并自动装载。
@Autowired是用在JavaBean中的注解,通过byType形式,用来给指定的字段或方法注入所需的外部资源。
两者的功能是一样的,就是能减少或者消除属性或构造器参数的设置,只是配置地方不一样而已。
 @Autowired
可以在 JavaBean中的 setter 方法中使用 @Autowired 注解。当 Spring遇到一个在 setter 方法中使用的 @Autowired 注解,它会在方法中执行 byType 自动装配。

可以在属性中使用 @Autowired 注解来除去 setter 方法。当时使用 为自动连接属性传递的时候,Spring 会将这些传递过来的值或者引用自动分配给那些属性

在构造函数中使用 @Autowired时,如果构造函数用到的属性涉及bean, 当创建 bean 时,即使在 XML 文件中没有使用元素配置@Autowired ,构造函数也会被自动连接

@Autowired 的(required=false)选项
默认情况下,@Autowired 注解意味着依赖是必须的,它类似于 @Required 注解,然而,你可以使用 @Autowired 的 (required=false) 选项关闭默认行为。

spring给所有service注解加日志_缓存_04

@Inject : JSR-330提供的注解通过‘AutowiredAnnotationBeanPostProcessor’ 类实现的依赖注入。

@Inject的使用,不加@Named注解,需要配置与变量名一致即可。

@Inject
    @Named("mongo")
    private Mongo mongo;

@Resource : JSR-250提供的注解,@Resource’通过 ‘CommonAnnotationBeanPostProcessor’ 类实现依赖注入。

默认 autowired by field name
如果 autowired by field name失败,会退化为 autowired by type
可以 通过@Qualifier 显式指定 autowired by qualifier name
如果 autowired by qualifier name失败,会退化为 autowired by field name。但是这时候如果 autowired by field name失败,就不会再退化为autowired by type了。

@Resource一般会指定一个name属性,如下:

@Resource(name = "userMapper")
    private UserMapper userMapper;

配置文件的注解:

@Configuration :声明当前类是个配置类,相当于一个Spring配置的xml文件.从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

spring给所有service注解加日志_加载_05

@ComponentScan (cn.test.demo):自动扫描包名下所有使用 @Component @Service  @Repository @Controller的类,并注册为Bean

spring给所有service注解加日志_加载_06

basePackages与value:  用于指定包的路径,进行扫描

basePackageClasses: 用于指定某个类的包的路径进行扫描

nameGenerator: bean的名称的生成器

useDefaultFilters: 是否开启对@Component,@Repository,@Service,@Controller的类进行检测

includeFilters: 包含的过滤条件

            FilterType.ANNOTATION:按照注解过滤

            FilterType.ASSIGNABLE_TYPE:按照给定的类型

            FilterType.ASPECTJ:使用ASPECTJ表达式

            FilterType.REGEX:正则

            FilterType.CUSTOM:自定义规则

excludeFilters: 排除的过滤条件,用法和includeFilters一样

@WiselyConfiguration :组合注解可以替代 @Configuration和@ComponentScan
@Bean :注解在方法上,声明当前方法的返回值为一个Bean

value: name属性的别名,在不需要其他属性时使用,也就是说value 就是默认值

name: 此bean 的名称,或多个名称,主要的bean的名称加别名。如果未指定,则bean的名称是带注解方法的名称。如果指定了,方法的名称就会忽略,如果没有其他属性声明的话,bean的名称和别名可能通过value属性配置

autowire : 此注解的方法表示自动装配的类型,返回一个Autowire类型的枚举

AOP切面编程注解:

@Aspect :声明这是一个切面 
@After @Before. @Around定义切面,可以直接将拦截规则(切入点 PointCut)作为参数
@PointCut :专门定义拦截规则然后在 @After @Before. @Around中调用
@Transcational :事务处理

以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {

    /**
     * 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
     */
    @AliasFor("transactionManager")
    String value() default "";

    /**
     * 同上。
     */
    @AliasFor("value")
    String transactionManager() default "";

    /**
     * 事务的传播行为,默认值为 REQUIRED。
     */
    Propagation propagation() default Propagation.REQUIRED;

    /**
     * 事务的隔离规则,默认值采用 DEFAULT。
     */
    Isolation isolation() default Isolation.DEFAULT;

    /**
     * 事务超时时间。
     */
    int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;

    /**
     * 是否只读事务
     */
    boolean readOnly() default false;

    /**
     * 用于指定能够触发事务回滚的异常类型。
     */
    Class<? extends Throwable>[] rollbackFor() default {};

    /**
     * 同上,指定类名。
     */
    String[] rollbackForClassName() default {};

    /**
     * 用于指定不会触发事务回滚的异常类型
     */
    Class<? extends Throwable>[] noRollbackFor() default {};

    /**
     * 同上,指定类名
     */
    String[] noRollbackForClassName() default {};

}

@Cacheable :数据缓存

@Cacheable 这个注解常用的几个属性:
cacheNames/value :用来指定缓存组件的名字
key :缓存数据时使用的 key,可以用它来指定。默认是使用方法参数的值。(这个 key 你可以使用 spEL 表达式来编写)
keyGenerator :key 的生成器。 key 和 keyGenerator 二选一使用
cacheManager :可以用来指定缓存管理器。从哪个缓存管理器里面获取缓存。
condition :可以用来指定符合条件的情况下才缓存
unless :否定缓存。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。当然你也可以获取到结果进行判断。(通过 #result 获取方法结果)
sync :是否使用异步模式

@EnableAaspectJAutoProxy :开启Spring 对这个切面(Aspect )的支持
@Target (ElementType.TYPE):元注解,用来指定注解修饰类的那个成员 -->指定拦截规则
@Retention(RetentionPolicy.RUNTIME) 当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.-->指定拦截规则
Spring常用配置:

@import :导入配置类
@Scope :新建Bean的实例 @Scope("prototype")声明Scope 为 Prototype

默认是单例模式,即scope="singleton"。另外scope还有prototype、request、session、global session作用域。scope="prototype"多例

@scope默认是单例模式(singleton)

如果需要设置的话@scope("prototype")

1.singleton单例模式,

  全局有且仅有一个实例

2.prototype原型模式,

  每次获取Bean的时候会有一个新的实例

3.request

  request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效

4.session

  session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

5.global session

global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。

@Value :属性注入·         
@Value ("我爱你")  -->普通字符串注入
@Value ("#{systemProperties['os.name']}") -->注入操作系统属性
@Value ("#{ T (java.lang.Math).random()  * 100.0 }") -->注入表达式结果
@Value ("#{demoService.another}") -->注入其他Bean属性
@Value ( "classpath:com/wisely/highlight_spring4/ch2/el/test.txt" ) -->注入文件资源
@Value ("http://www.baidu.com")-->注入网址资源
@Value ("${book.name}" ) -->注入配置文件  注意:使用的是$ 而不是 #

@PostConstruct :在构造函数执行完之后执行

1. 除了拦截器这个特殊情况以外,其他情况都不允许有参数,否则spring框架会报IllegalStateException;而且返回值要是void,但实际也可以有返回值,至少不会报错,只会忽略

2. 方法随便你用什么权限来修饰,public、protected、private都可以,反正功能是由反射来实现

3. 方法不可以是static的,但可以是final的

所以,综上所述,在spring项目中,在一个bean的初始化过程中,方法执行先后顺序为

Constructor > @Autowired > @PostConstruct

先执行完构造方法,再注入依赖,最后执行初始化操作,所以这个注解就避免了一些需要在构造方法里使用依赖组件的尴尬。

@PreDestroy  :在 Bean 销毁之前执行

@ActiveProfiles :用来声明活动的 profile
@profile:为不同环境下使用不同的配置提供了支持·         
 @Profile("dev") .......对方法名为 dev-xxxx的方法提供实例化Bean
@ActiveProfiles("dev")测试类中激活相应环境Bean
@EnableAsync :开启异步任务的支持(多线程)
@Asyns :声明这是一个异步任务,可以在类级别和方法级别声明.
@EnableScheduling :开启对计划任务的支持(定时器)
@Scheduled :声明这是一个计划任务支持多种计划任务,包含 cron. fixDelay fixRate·         
@Scheduled (dixedDelay = 5000)通过注解定时更新
@Conditional :条件注解,根据满足某一特定条件创建一个特定的Bean
@ContextConfiguration :加载配置文件·         
@ContextConfiguration(classes = {TestConfig.class})
@ContextConfiguration用来加载ApplicationContext 
classes属性用来加载配置类
@WebAppCofiguration :指定加载 ApplicationContext是一个WebApplicationContext
@Enable*注解:@EnableAsync :开启异步任务的支持(多线程)
@EnableScheduling :开启对计划任务的支持(定时器)
@EnableWebMVC :开启对Web MVC 的配置支持
@EnableAaspectJAutoProxy :开启Spring 对这个切面(Aspect )的支持
@EnableConfigurationProperties开启对@ConfigurationProperties注解配置Bean的支持
@EnableJpaRepositories :开启对Spring Data JAP Repository的支持
@EnableTransactionManagement开启对注解式事物的支持
@EnableCaching开启注解是缓存的支持.
@EnableDiscoveryClient让服务发现服务器,使用服务器.Spring cloud实现服务发现
@EnableEurekaServer注册服务器 spring cloud实现服务注册@
@EnableScheduling让spring可以进行任务调度,功能类似于spring.xml文件中的命名空间<task:*>
@EnableCaching开启Cache缓存支持

Spring Boot注解(补充spring中存在的不在解释):

 @SpringBootApplication :是Spring Boot项目的核心注解主要目的是开启自动配置·         
@SpringBootApplication注解是一个组合注解,主要组合了@Configuration .+@EnableAutoConfiguration.+@ComponentScan
@Value :属性注入,读取properties或者 Yml文件中的属性
@ConfigurationProperties :将properties属性和一个Bean及其属性关联,从而实现类型安全的配置·         
@ConfigurationProperties(prefix = "author",locations = {"classpath:config/author.properties"})
通过@ConfigurationProperties加载配置,通过prefix属性指定配置前缀,通过location指定配置文件位置
@EnableAutoConfiguration注解:作用在于让 Spring Boot  根据应用所声明的依赖来对 Spring框架进行自动配置
        这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。
@ Configuration 注解,以明确指出该类是 Bean配置的信息源
@ComponentScan 注解会告知Spring扫描指定的包来初始化Spring Bean这能够确保我们声明的Bean能够被发现。
@ImportResource 注解加载XML配置文件
@EnableAutoConfiguration(exclude={xxxx.class})禁用特定的自动配置
@SpringBootApplication   注解等价于以默认属性使用@Configuration,@EnableAutoConfiguration和     @ComponentScan。 
@SuppressWarnings注解

@SuppressWarnings("unchecked")·         

告诉编译器忽略 unchecked警告信息,如使用 list ArrayList等未进行参数化产生的警告信息
@SuppressWarnings("serial")·         
如果编译器出现这样的警告信息: The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long     使用这个注释将警告信息去掉。
@SuppressWarnings("deprecation")·         
如果使用了使用@Deprecated注释的方法,编译器将出现警告信息。使用这个注释将警告信息去掉。
@SuppressWarnings("unchecked", "deprecation")·         
告诉编译器同时忽略unchecked和deprecation的警告信息。
@SuppressWarnings(value={"unchecked", "deprecation"})·         
等同于@SuppressWarnings("unchecked", "deprecation")