spring注入相关注解
本次主要整理四个注解 @ComponentScan、@Scope、@Conditional、@Import
1. @ComponentScan(value = "com.xiaoguo") 报扫描注解: 扫描该路径下的@controller @component @service 等等注解并将其交给spring容器管理。可以选择只扫描那些组件或是排除那些组件: includeFilters=Filter[]:指定只包含的组件
excludeFilters=Filter[]:指定需要排除的组件;
注解:
@ComponentScan(value = "com.xiaoguo.annotation", excludeFilters = {
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = {MyTypeFilter.class})
})
自定义过滤类:
package com.xiaoguo.annotation.filter; import com.xiaoguo.annotation.beans.Car;
import org.springframework.core.io.Resource;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.ClassMetadata;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter; import java.io.IOException; /**
* @author xiaoguo
* @date 2019-10-14 下午 9:11
*/
public class MyTypeFilter implements TypeFilter { @Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
//获取当前正在扫描的类的类信息
ClassMetadata classMetadata = metadataReader.getClassMetadata();
String className = classMetadata.getClassName();
Class<?> forName = null;
try {
forName = Class.forName(className);
if (Car.class.isAssignableFrom(forName)) {
// true就加载到IOC容器
return true;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return false;
}
}
2. @Scope("prototype") 此注解表示交给容器管理的对象为多例模式,不加默认为但例模式,加此注解每次从容器获取对象都是新new的对象。
3. @Conditional({WindowsCondition.class}) 按照一定的条件满足条件的则注册bean到容器中
注解:
@Conditional({LinuxCondition.class})
@Bean("linux")
public Person person03() {
return new Person("linux", 25);
}
自定义条件类:
package com.xiaoguo.annotation.condition; import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata; /**
* @author xiaoguo
* @date 2019-10-11 下午 8:12
*/
public class LinuxCondition implements Condition { @Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { //3.获取到当前环境信息
Environment environment = context.getEnvironment(); String property = environment.getProperty("os.name");
if (property.contains("linux")) {
//true 注入bean
return true;
}
return false;
}
}
4. @Import({Car.class}) 快速将Car导入到spring容器中
ImportSelector 注册类到容器中:
@Import({MyImportSelector.class})
public class MyImportSelector implements ImportSelector {
/**
* 返回值就是导入容器中的组件全类名
*
* @param importingClassMetadata
* @return
*/
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.xiaoguo.annotation.beans.Red"};
}
}
ImportBeanDefinitionRegistrar与上同理:
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
/**
*
* @param importingClassMetadata 当前类的注解信息
* @param registry BeanDefinition注册类
*/
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
boolean tf = registry.containsBeanDefinition("com.xiaoguo.annotation.beans.Red");
if (tf) {
RootBeanDefinition beanDefinition = new RootBeanDefinition(XiaoGuo.class);
registry.registerBeanDefinition("xiaoguo", beanDefinition);
}
}
}
spring注入相关注解的更多相关文章
- Spring中@相关注解的意义
1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@rep ...
- 监听器中spring注入相关的问题
问题描述: 需求是要求在项目启动自动触发一个service中的线程的操作,使用监听器来实现,但是自定义监听器中spring注解service失败,通过WebApplicationContextUtil ...
- Spring的相关注解
说明写在最前面:摘录于 博客园--受伤滴小萝卜 文章 文章链接受伤滴小萝卜文章--Spring注解 本文章只用作学习和帮助其他人学习记录使用 Spring 注解学习笔记 声明Bean的注解: ...
- spring 注入使用注解(不用xml)
(一):导入spring4的jar包 (二):在xml中配置扫描的包 <context:component-scan base-package="entity">< ...
- Spring bean依赖注入、bean的装配及相关注解
依赖注入 Spring主要提供以下两种方法用于依赖注入 基于属性Setter方法注入 基于构造方法注入 Setter方法注入 例子: public class Communication { priv ...
- Spring注入方式及注解配置
一:基于xml的DI(Dependency Injection) 注入类型: 定义学生Student实体类和小汽车Car实体类:进行封装和生成ToString(),并自定义属性Car Student ...
- Spring依赖注入:注解注入总结
更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.S ...
- Spring依赖注入:注解注入
注解注入顾名思义就是通过注解来实现注入, Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.Controller.Repository.Com ...
- 【初识Spring】对象(Bean)实例化及属性注入(注解方式)
通过xml的方式进行对象的实列化或属性注入或许有一些繁琐,所以在开发中常用的方式更多是通过注解的方式实现对象实例化和属性注入的. 开始之前 1.导入相关的包(除了导入基本的包还要导入aop的包): 创 ...
随机推荐
- 2019-8-4-自动更新所有-Git-仓库
title author date CreateTime categories 自动更新所有 Git 仓库 lindexi 2019-08-04 14:44:59 +0800 2019-08-01 2 ...
- 关于methods、computed、watch的使用
关于methods.computed.watch的使用,前前后后我有转载过好几篇别人的文章.但始终没有自己成型的博文来记录,现自己尝试性的总结一下三者之间的区别: computed:计算属性 comp ...
- 微信里首次跳转会到首页问题(window.location失效)
将window.location.href 换为location.href
- gitLab操作规范和项目流程
刚做完一个项目并且艰难得上线,对整个项目流程和gitLab规范 有了一些心得,给新来的同学普及一下. 最先产品会写一篇需求文档,咱们要先看需求文档对项目有一个大致了解,然后产品喊后端.ui.前端 一 ...
- msbuild 项目文件常用判断条件
在写项目文件的时候,需要根据不同的条件定义或执行不同的代码,有一些比较常使用的判断,本文收藏起来,方便大家找 在 msbuild 的项目文件 cspoj 或 xx.target 等文件里面,可以使用 ...
- HBase的安装及使用
一.摘要以前搜书吧的数据量比较小,使用数据库+静态文件存储的方式就可以搞定,主要有2个系统组成:网站前端+后台服务.事先把图书详情等一些固定内容生成html静态文件和前端的其他静态文件打包部署,动态变 ...
- Team Foundation Server 2015使用教程【5】:默认团队checkin权限修改
- Dubbo-本地Bean测试
Dubbo本地测试API的Bean 一.建立一个测试类文件 二.测试API // 自己要测试的API public static final XxApi xxApi; 三.注入Bean static ...
- .Net快速上手Nlog日志组件
目录 一.NLog 简介 二.NLog 安装 三. NLog 配置 四.程序代码中写日志 五.参考 一.NLog 简介 NLog是适用于各种.NET平台的灵活,免费的日志记录平台.NLog使写入多个目 ...
- spring整合springMVC、mybatis、shiro
jar包: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding& ...