# spring-custom-annotation
**Repository Path**: net_yc60/spring-custom-annotation
## Basic Information
- **Project Name**: spring-custom-annotation
- **Description**: 这是一个spring用来处理自定义类注解的小型代码
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-04-08
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring-custom-annotation
#### 介绍
1. 这是一个spring用来处理自定义类注解的小型代码
2. 这里说的不是springAop,是类的注解@Target({ ElementType.TYPE }),aop是不能处理到类注解的
3. 注意:使用自定义注解的类,是不需要添加spring组件注解的。
4. 如果添加的话,类就会被spring初始化了,当你需要使用自定义初始化方法的时候就会出错,因为一个类不能同时存在两个初始化方法
5. 本项目除了依赖spring,其他项目都不依赖
#### 安装教程
1. 下载本项目
2. 执行install.bat
#### 使用说明
1. 在需要使用的项目中增加本项目依赖
```
com.lang
spring-custom-annotation
1.0.0-SNAPSHOT
```
2. 需要使得spring扫描到com.lang包
```
springmvc 在applicationContext.xml
在原来项目的基础上添加com.lang进入扫描
```
```
springBoot 在启动类中
@SpringBootApplication(scanBasePackages = {"xxx","com.lang"}) 在原来项目的基础上添加com.lang进入扫描
```
3.实现 CustomAnnotationScannerService 接口
```
接口中共需要实现三个方法:
/**
* 设置扫描的注解
*/
Class type();
/**
* 设置扫描的包
*/
String[] scannerPackage();
/**
* 处理扫描
* @param t 扫描到的注解对象,可以通过t对象获取注解的属性内容
* @param markClass 被注解到的类
* @param beanDefinitionRegistry spring类注册对象
* 例子:
* GenericBeanDefinition beanDef = new GenericBeanDefinition();
* beanDef.setBeanClass(xxx.class); //设置你需要实例化的类对象
* Map map = Maps.newHashMap(); //map用于设置类的属性
* beanDef.setPropertyValues(initBeanValues(map));
* beanDefinitionRegistry.registerBeanDefinition(beanName,beanDef);
*/
void doScan(T t, Class> markClass,BeanDefinitionRegistry beanDefinitionRegistry);
```
4.实例
以注解 @RabbitMqService 为例(每一个类注解就要单独实现一个CustomAnnotationScannerService 接口)
```
@Component //需要声明为spring的一个组件进行处理
public class RabbitMqServiceAop implements CustomAnnotationScannerService {
@Override
public Class type() {
return RabbitMqService.class; //通过这个方法声明要扫描的注解
}
@Override
public String[] scannerPackage() {
return new String[]{"<使用了这个注解的类所在的包>"}; //这是用来设置扫描的包的
}
//这个方法是扫描到这些使用了该自定义注解的类,之后你要搞什么,我这边是通过这个扫描手动加入几个特殊的bean
* @param t 扫描到的注解对象,可以通过t对象获取注解的属性内容
* @param markClass 被注解到的类
* @param beanDefinitionRegistry spring类注册对象
@Override
public void doScan(RabbitMqService rabbitMqService,Class> markClass, BeanDefinitionRegistry
beanDefinitionRegistry) {
GenericBeanDefinition beanDef = new GenericBeanDefinition();
beanDef.setBeanClass(RabbitInvokerProxyFactoryBean.class);
beanDef.setPropertyValues(initBeanValues(map));
String simpleName = markClass.getSimpleName();
String beanName = simpleName.substring(0,1).toLowerCase() + simpleName.substring(1) + "client";
beanDefinitionRegistry.registerBeanDefinition(beanName,beanDef);
}
}
```
##### 2020-08-11 新增 @MethodAop 常用注解工具类
使用方法:
1. 添加依赖和扫描com.lang
步骤同上
2. 具体代码: