Spring注解基础学习总结
2024-09-06 07:32:42
1.依赖注入注解:
@Component:Bean注入到Spring容器组件(通用)
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE):Bean作用域(
SCOPE_PROTOTYPE:每次注入bean就是一个新的Bean
SCOPE_SINGLETON:单例
)
@Repository:标记该类为Dao数据访问层
@Service:标记该类为Service业务逻辑层
@Controller:标记该类为Controller控制访问层
@Autowired注解:自动装配bean
使用说明:该注解可以放在构造方法上,注入属性上,普通方法上
属性:required = false(如果该类没有在Spring容器中则忽略不报错)
歧义性:@Qualifier作用比@Primary强
/**
* Created by 小小高 on 19-7-14
*
* 学习Spring bean注入
* @Component注解:
* 标记这个类为组件,进行注入bean
*
* @Autowired注解:自动装配bean
* 使用说明:该注解可以放在构造方法上,注入属性上,普通方法上
*/
@Data
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
//@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class SpringTestBeanClass {
private String name;
private Integer age;
private String id;
@Autowired
private SpringBeanSonClass02 springBeanSonClass; // @Autowired/*注入bean到构造方法*/
// public SpringTestBeanClass(SpringBeanSonClass springBeanSonClass){
// this.springBeanSonClass = springBeanSonClass;
// } // @Autowired/*注入bean到普通方法*/
// public void setSpringBeanSonClass(SpringBeanSonClass springBeanSonClass){
// this.springBeanSonClass = springBeanSonClass;
// }
public void pay(){
System.out.println("调用SpringTestBeanClass类的pay方法");
springBeanSonClass.springBeanSonClass02();
}
}
@Configuration:标记该类为配置类
* @Configuration注解;声明该类为配置类,加载Spring容器
* 使用说明:
* @Configuration注解的配置类有如下要求:
* 1.@Configuration不可以是final类型;
* 2.@Configuration不可以是匿名类;
* 3.嵌套的configuration必须是静态类。
* 加载容器:
* @Configuration配置spring并启动spring容器
* 1.@Configuration启动容器+@Bean注册Bean
* 2.@Configuration启动容器+@Component注册Bean
* 3.使用 AnnotationConfigApplicationContext 注册 AppContext 类的两种方法
* 4.配置Web应用程序(web.xml中配置AnnotationConfigApplicationContext)
*@ComponentScan注解:告诉Srping需要扫描的包或类,spring自动扫描并且装入bean容器。
* 使用说明:
* 1.默认规则:
* 是以该配置类所在的包作为基础包,会扫描该配置类同级包的类和子包类进行自动扫描装配
* 2.属性basePackages:
* 加载基础扫描包,自动装配扫描该包和该包的子包
* 3.属性basePackageClasses:
* 加载自动扫描标记类的同级包和子包的类
* @Bean注解:加载Bean容器实例
/**
* Created by 小小高 on 19-7-14
*
* @Configuration注解;声明该类为配置类,加载Spring容器
* 使用说明:
* @Configuration注解的配置类有如下要求:
* 1.@Configuration不可以是final类型;
* 2.@Configuration不可以是匿名类;
* 3.嵌套的configuration必须是静态类。
* 加载容器:
* @Configuration配置spring并启动spring容器
* 1.@Configuration启动容器+@Bean注册Bean
* 2.@Configuration启动容器+@Component注册Bean
* 3.使用 AnnotationConfigApplicationContext 注册 AppContext 类的两种方法
* 4.配置Web应用程序(web.xml中配置AnnotationConfigApplicationContext)
*@ComponentScan注解:告诉Srping需要扫描的包或类,spring自动扫描并且装入bean容器。
* 使用说明:
* 1.默认规则:
* 是以该配置类所在的包作为基础包,会扫描该配置类同级包的类和子包类进行自动扫描装配
* 2.属性basePackages:
* 加载基础扫描包,自动装配扫描该包和该包的子包
* 3.属性basePackageClasses:
* 加载自动扫描标记类的同级包和子包的类
* @Bean注解:加载Bean容器实例
*
*/ @Configuration
//@ComponentScan(basePackages = {"com.test.xll.spring_demo_study.bean.son"})
@ComponentScan(basePackageClasses = FlagBasePackageClass.class)
//@ComponentScan/*默认规则*/
public class SpringBeanDIConfig { @Bean
public SpringBeanSonClass springBeanSonClass(){
return new SpringBeanSonClass();
} @Bean
public SpringBeanSonClass02 springBeanSonClass02(){
return new SpringBeanSonClass02();
} @Bean
@Conditional(DIBeanCondition.class)/*条件注入Bean*/
public DIConditionBean diConditionBean(){
return new DIConditionBean();
} }
@PropertySource:注入外部的值
@Configuration
@PropertySource("classpath:app.properties")
public class SpringPropertySourceConfig { @Autowired
private Environment environment; @Bean
public DIPropertySourceBean diPropertySourceBean(){
return new DIPropertySourceBean(environment.getProperty("xll.key"), environment.getProperty("xll.value"));
}
}
xll.key=key
xll.value=value
@Import注解:
1.加载注入普通类到Spring容器中
2.动态注册ImportSelector
3.手动注册ImportBeanDefinitionRegistrar
代码:
/**
* Created by 小小高 on 19-7-14
*
* @Import注解:注入普通类到Spring容器中
*
*/
@Configuration
@Import(value = {SpringImportStudyBean.class, SelfImportSelector.class, SelfImportBeanDefinitionRegistrar.class})
public class SpringImportStudyConfig { }
**
* Created by 小小高 on 19-7-14
*
* 学习注解@Import的普通类
*/
@Data
public class SpringImportStudyBean { private String name = "学习@Import注解使用的Bean类"; }
/**
* Created by 小小高 on 19-7-14
*
* 学习注解@Import的普通类
*/
@Data
public class SpringImportSelectprStudyBean { private String name = "学习接口ImportSelector注入Bean类"; }
/**
* Created by 小小高 on 19-7-14
*/
public class SpringSelfImportBeanDefinitionRegistrarBean { public void print(){
System.out.println("类名:"+Thread.currentThread().getStackTrace()[1].getClassName());
}
}
/**
* Created by 小小高 on 19-7-14
*/
public class SelfImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
//注入普通类到Bean容器
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(SpringSelfImportBeanDefinitionRegistrarBean.class);
beanDefinitionRegistry.registerBeanDefinition("springSelfImportBeanDefinitionRegistrar", rootBeanDefinition);
}
}
/**
* Created by 小小高 on 19-7-14
*
* 使用ImportSelector进行注入bean到容器中
*/
public class SelfImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.test.xll.spring_demo_study.bean.SpringImportSelectprStudyBean"};
}
}
最新文章
- 06OC之内存管理
- java继承的对象中构造函数的调用顺序
- Maya导入Unity的教程
- 【Delphi】注册快捷键
- [转]ORACLE 异常错误处理
- oracle 临时表学习
- 创建一个Android工程
- eclipse 解决插件失效
- Java的一点内容(2)
- HDU 5769 Substring(后缀数组)
- 使用Blend的一些问题
- C# 利用ajax实现局部刷新
- 从PRISM开始学WPF(五)MVVM(一)ViewModel?
- 实例演示如何在spring4.2.2中集成hibernate5.0.2并创建sessionFactory
- Spring结合log4j(slf4j)
- redis 系列25 哨兵Sentinel (高可用演示 下)
- form-layui
- Java OPC 代码
- 拓扑排序 --- AtCode - 3596
- *****hibernate主键生成
热门文章
- IceCTF-Matrix
- java IO 类概述表
- TIKA环境配置
- 当引入的类库存在一个类型时,提示“xxx”和“xxx”之间的不明确引用时,消除歧义的方法
- xshell6 远程连接时提示 WARNING! The remote SSH server rejected X11 forwarding request.
- P3410 /// 最大流最小割
- nuxt header 设置
- OpenResty实现限流的几种方式
- 使用fastClick.js所产生的一些问题
- d3操作svg路径动画,及dom移动