Spring框架本身的四大原则
- 使用POJO进行轻量级和最小侵入式开发
- 通过依赖注入和基于接口编程实现松耦合
- 通过AOP和默认习惯进行声明式编程
- 使用AOP和模板(template)减少模块化代码
声明Bean的注解
- @Component组件,没有明确的角色
- @Service在业务逻辑层使用
- @Repository在数据访问层使用
- @Controller在表现层使用
注入bean的注解:可以注解在set方法上或者属性上
-
@Autowired:Spring提供的注解
-
@Inject:JSR-330提供的注解
-
@Resource:JSR-250提供的注解
-
使用@Configuration声明当前类是一个配置类
-
使用@ComponentScan,自动扫描包名下所有使用声明bean的类,并注册为Bean
JAVA配置(Spring 4.x推荐)
- @Configuration声明当前类是一个配置类,相当于一个Spring配置的xml文件
- @Bean注解在方法上,声明当前方法的返回值为一个Bean,bean的名称是方法名
AOP注解
- 通过@Aspect注解声明一个切面
- 通过@Component让此切面成为Spring容器管理的Bean
- 通过@PointCut注解声明切点
- 通过@After注解声明一个建言,并使用@PointCut定义的切点
- 通过@Before注解声明一个建言,此检验直接使用拦截规则作为参数
- 使用@EnableAspectJAutoProxy注解开启SPring对AspectJ的支持
@Value
- 注入普通字符 @Value(“I love you”)
- 注入操作系统属性 @Value("#{systemProperties[‘os.name’]}")
- 注入表达式运算结果 @Value("#{T(java.lang.Math).random()*100.0}")
- 注入其他Bean的属性@Value(#{demoService.another})
- 注入文件内容 @Value(“classpath:com/wisely/test.txt”)
- 注入网址内容 @Value(“http://www.baidu.com”)
- 注入属性文件 @Value("${book.name}")
- 注入配置文件需使用@PropertySource指定文件地址,若使用@Value注入,则需要配置一个PropertySourcesPlaceholderConfigurer的Bean
事件
Spring的事件需要遵循如下流程;
- 自定义事件,继承ApplicationEvent
- 定义事件监听器,实现ApplicationListener
- 使用容器发布事件
多线程
- 使用@EnableAsync注解开启异步任务支持
- 配置类实现AsyncConfigurer接口并重写getAsyncExecutor方法,并返回一个ThreadPoolTaskExecutor,这样就获得了一个基于线程池TaskExecutor
- 通过@Async注解表明该方法是个异步方法,如果注解在类级别,表明该类所有的方法都是异步方法。
计划任务:
- 通过配置类@EnableScheduling来开启对计划任务的支持
- 然后在要执行计划任务的方法上注解@Scheduled声明这是一个计划任务
- @Scheduled支持多种类型的计划任务,包含cron、fixDelay,fixRate等
组合注解与元注解: - 使用@WiselyCOnfiguration组合注解替代@Configuration和@ComponentScan