声明Bean的注解:
@Component :组件,没有明确的角色 标注Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean@Component(@Controller、@Service、@Repository)通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。
@Service :在业务逻辑层(service层)使用
@Service本身是基于@Component注解的扩展,被@Service注解的POJO类表示Service层实现,从而见到该注解就想到Service层实现,使用方式和@Component相同;
@Repository :在数据访问层(dao层)使用.
@Repository本身是基于@Component注解的扩展,被@Repository注解的POJO类表示DAO层实现,从而见到该注解就想到DAO层实现,使用方式和@Component相同;
@Controller :在展现层(MVC--SpringMVC)使用
注入Bean的注解:
@Controller本身是基于@Component注解的扩展,被@Controller注解的类表示Web层实现,从而见到该注解就想到Web层实现,使用方式和@Component相同;
@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) 选项关闭默认行为。
@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容器。
@ComponentScan (cn.test.demo):自动扫描包名下所有使用 @Component @Service @Repository @Controller的类,并注册为Bean
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")