使用Spring获得包含自定义注解的对象
来源:互联网 发布:手机如何彻底卸载软件 编辑:程序博客网 时间:2024/05/22 21:30
直接上代码比较容易理解。
RpcService.java
package com.mrbcy.bigdata.basic.spring.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import org.springframework.stereotype.Component;@Target({ ElementType.TYPE })//注解用在接口上@Retention(RetentionPolicy.RUNTIME)//VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息@Componentpublic @interface RpcService { String value();}
HelloService.java
package com.mrbcy.bigdata.basic.spring.annotation;public interface HelloService { String hello(String name);}
HelloServiceImpl.java
package com.mrbcy.bigdata.basic.spring.annotation;@RpcService("HelloServicebb")public class HelloServiceImpl implements HelloService { public String hello(String name) { return "Hello! " + name; } public void test(){ System.out.println("test"); }}
MyServer.java
package com.mrbcy.bigdata.basic.spring.annotation;import java.lang.reflect.Method;import java.util.Map;import org.springframework.beans.BeansException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Component;@Component //ApplicationContextAware会为Component组件调用setApplicationContext方法; 测试Myserver3时注释public class MyServer implements ApplicationContextAware { public static void main(String[] args) { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext2.xml"); } public void setApplicationContext(ApplicationContext ctx) throws BeansException { Map<String, Object> serviceBeanMap = ctx .getBeansWithAnnotation(RpcService.class); for (Object serviceBean : serviceBeanMap.values()) { try { //获取自定义注解上的value String value = serviceBean.getClass().getAnnotation(RpcService.class).value(); System.out.println("注解上的value: " + value); //反射被注解类,并调用指定方法 Method method = serviceBean.getClass().getMethod("hello", new Class[] { String.class }); Object invoke = method.invoke(serviceBean, "bbb"); System.out.println(invoke); } catch (Exception e) { e.printStackTrace(); } } }}
applicationContext2.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.mrbcy.bigdata.basic.spring.annotation"/></beans>
执行结果:
注解上的value: HelloServicebbHello! bbb
可以看出Spring框架拿到了使用了我们自定义注解的类然后成功调用了它的成员函数。
0 0
- 使用Spring获得包含自定义注解的对象
- Spring自定义注解的使用
- Spring MVC 集成 AOP,自定义注解,在切面获得方法参数,以及自定义注解的参数。
- AOP中获得自定义注解对象
- Spring的自定义注解
- spring自定义bean(包含引用bean)--自定义注解解析
- 使用Spring处理自定义注解
- spring 自定义注解及使用
- Spring中使用自定义的注解校验器的实现
- Listener中获得spring注解的service
- Spring Boot项目中自定义注解的使用
- Spring Boot项目中自定义注解的使用
- 自定义注解的使用
- Java注解的使用,实现仿Spring的对象装载
- spring注解的使用
- Spring注解的使用
- spring注解的使用
- Spring注解的使用
- 78. Subsets
- Unreal Engine 4 实现基于网格的水面模拟(源代码)
- python模块导入,环境变量
- 仿微信朋友圈图片点击浏览和关闭时的图片缩放的过渡动画。
- Oracle之pl/sql
- 使用Spring获得包含自定义注解的对象
- 菜鸟理财——保险
- string相关函数大演练
- insertAdjacentHTML的简单用法
- jsonp跨域传值
- Codeforces 764C - Timofey and a tree(dfs)
- Linux上安装部署WildFly 10
- array相关函数大演练
- mysql中的事务处理