Spring注解基础学习总结
Posted x-ll123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring注解基础学习总结相关的知识,希望对你有一定的参考价值。
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注解的配置类有如下要求:
* [email protected]不可以是final类型;
* [email protected]不可以是匿名类;
* 3.嵌套的configuration必须是静态类。
* 加载容器:
* @Configuration配置spring并启动spring容器
* [email protected]启动容器[email protected]注册Bean
* [email protected]启动容器[email protected]注册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注解的配置类有如下要求: * [email protected]不可以是final类型; * [email protected]不可以是匿名类; * 3.嵌套的configuration必须是静态类。 * 加载容器: * @Configuration配置spring并启动spring容器 * [email protected]启动容器[email protected]注册Bean * [email protected]启动容器[email protected]注册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";
以上是关于Spring注解基础学习总结的主要内容,如果未能解决你的问题,请参考以下文章