一文教你实现自定义注解实现自己的java组件

1.@EnableFindMe是什么注解
当然是我自创的注解,但是,大家先别关闭这篇文章 这不是一个普通的自定义注解,
不知道大家看到@@Enablexxxx有没有很熟悉的感觉,例如: @EnableDiscoveryClient @EnableTransactionManagement @EnableCircuitBreaker @EnableFeignClients 这些注解大家应该还比较熟悉吧,都是在开发微服务项目的时候,在启动类上常用的注解 ,他们的服务使用这些 注解提供了很多丰富的功能 ,那我们是不是也可以使用这样的形式提供丰富的功能呢 ,
2.实现@EnableFindMe注解
既然是自创的注解,那么我们就来实现这个注解,废话不多说,上代码
2.1.创建 customannotations模块 自定义注解
正常的spring boot项目的创建方式
然后把 启动类改成一个注解

pom.xml


org.springframework.boot
spring-boot-starter

  <build>
    <plugins>
        <plugin>
        <!--  手动指定maven打包的插件-->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>

@EnableFindMe
@Target(ElementType.TYPE) //作用范围,可以作用在类,接口,注解,枚举
@Retention(RetentionPolicy.RUNTIME) // 在程序运行的时候起作用
@Documented // 表明该注解标记的元素可以被Javadoc 或类似的工具文档化
@Inherited // 所标记的类的子类也会拥有这个注解
@Import(AutoConfiguration.class) // spring的注解,可以引入一个类,把这个类变成IOC的Bean
public @interface EnableFindMe {

}
AutoConfiguration.java
// 定义配置为配置文件 其实这里使用 @Component 也可以,我的目的只是为了 把这个类注入到IOC,
// 然后使得@ComponentScan这个注解起作用
@Configuration
@ComponentScan(“com.findme.customannotations.*”) // 扫描这个目录下的文件,注入ICO中
public class AutoConfiguration {
@PostConstruct
public void init(){
System.out.println(“AutoConfiguration!!”);
}
}

IndexService.java
@Component // 扫描到了这个就会吧这个类注入到ICO
public class IndexService {
// bean初始化的时候执行
@PostConstruct
public void init(){
System.out.println(“IndexService!!”);
}

}

2.2 创建一个普通的spring boot项目
这个项目就没什么特殊,先把刚才的 customannotations用maven打包,然后再这个项目上使用刚才的自定义注解
2.3运行看效果
2.3.1.使用注解和不使用注解的区别
1.使用注解

2.不使用注解

我们发现,当我们使用注解的时候IndexService和AutoConfiguration都被注册成ICO的Bean了,有没有很神奇,
我们平时写项目的时候,只要在spring boot项目下,使用 @Service @Component等注解 可以被注册成Bean,是因为@SpringBootApplication注解默认把本类包下有对应注解的类注册成bean (什么,你不相信)我们来看看效果

HelloService2在 启动类的下面,所以被注册上去了,而HelloService不在启动类的下面,所以没被注册到IOC
好,我们言归正传,又有好奇的同学就会问了,这有什么用啊,不就是把被注册到IOC中的bean的方式 改成了一个注解,我直接在 项目的启动类上使用 @ComponentScan(“xxx”) 扫描你的包,不也一样可以实现这些功能吗 ,当然不一样了,自定义注解装配有很多好处!!!
我们在会想想文章开头说的微服务地图的自定义注解 @EnableDiscoveryClient @EnableTransactionManagement @EnableCircuitBreaker @EnableFeignClients ,我们的开头是不是也是这种方式呢,通这样的方式,提供了自己的服务,和spring进行了深度整合
2.4使用自定义注解扫描包的好处
1.可以自己封装独立的starter,并且以注解的形式提供出去,
2.在自己封装的starter中可以,做很多处理,例如,在某个bean创建的时候加入一点自己的逻辑,自己配置后置处理器,和spring深度整合,当触发某种情况的时候,触发自己的后置处理器,做鉴权,当http请求来的时候,做统一的处理,等等等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值