java 自定义注解注入父类属性值
2017-12-11 20:42
351 查看
有这样的需求其实我也挺奇葩的,不过也合理,先说说现实情况:
正在开发一个 Java 后台项目
基于用 SSM 框架改造
不想重复写这么多代码
搞了个基类
基类中基本的增删改查都有,继承下来就行了 <( ̄▽ ̄)/
那么问题来了
基类中需要拿到继承他的子类的信息,例如返回的视图路径啊,编辑数据时需要表名和 id 啊
以前 SSM 项目用配置文件,可以配置 bean 的时候注入属性
那么现在呢?
毛线啊!!!不行啊!现在都用注解啦~~(ノಠ益ಠ)ノ彡┻━┻
不过 Java 大法好啊,有注解反射 balabala ~ (ˉ▽ ̄~) 切~~
于是就试试了,来来来,码上见:
注解类:
父类:
子类:
测试类:
输出结果:
其实这并不算什么技术,顶多算是技巧,而且除了上面的方法还可以在子类里面做文章
例如下面的方法也行,不过有代码洁癖啊~~~,所以就选用自定义注解了,
如果有更好的方法请赐教啊~,好,收工~ヾ( ̄▽ ̄)Bye~Bye~
或者:
正在开发一个 Java 后台项目
基于用 SSM 框架改造
不想重复写这么多代码
搞了个基类
基类中基本的增删改查都有,继承下来就行了 <( ̄▽ ̄)/
那么问题来了
基类中需要拿到继承他的子类的信息,例如返回的视图路径啊,编辑数据时需要表名和 id 啊
以前 SSM 项目用配置文件,可以配置 bean 的时候注入属性
那么现在呢?
毛线啊!!!不行啊!现在都用注解啦~~(ノಠ益ಠ)ノ彡┻━┻
不过 Java 大法好啊,有注解反射 balabala ~ (ˉ▽ ̄~) 切~~
于是就试试了,来来来,码上见:
注解类:
import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * @author 艾小天 * @email :wongtp@outlook.com * @date :2017年12月11日 下午7:58:43 * 用于 controller 子类为父类的属性注入值 */ @Retention(RUNTIME) @Target(TYPE) public @interface SuperController { /** * 视图路径 */ String viewPath() default ""; /** * 表名 */ String tableName() default ""; /** * 主键名称 */ String primaryKey() default "ID"; }
父类:
import com.wb.base.annotations.SuperController; /** * @author 艾小天 * @email :wongtp@outlook.com * @date :2017年12月11日 下午7:55:18 * */ public class ParentController { private String viewPath;//视图路径 private String tableName;//表名 private String primaryKey;//主键名称 protected ParentController() { SuperController sc = getClass().getAnnotation(SuperController.class); if (sc != null) { tableName = sc.tableName(); viewPath = sc.viewPath(); primaryKey = sc.primaryKey(); } } //这里就可以做各种 CRUD 操作啦!~( ̄▽ ̄~)(~ ̄▽ ̄)~ protected void getDomain(String domainID) { System.out.println("这是domainID:" + domainID); System.out.println("这是viewPath:" + viewPath); System.out.println("这是tableName:" + tableName); System.out.println("这是primaryKey:" + primaryKey); } }
子类:
import com.wb.base.annotations.SuperController; /** * @author 艾小天 * @email :wongtp@outlook.com * @date :2017年12月11日 下午7:59:43 * */ @SuperController(tableName = "my_table", primaryKey = "my_id", viewPath = "hello/world/") public class ChildController extends ParentController { }
测试类:
/** * @author 艾小天 * @email :wongtp@outlook.com * @date :2017年12月11日 下午8:01:21 * */ public class Test { public static void main(String[] args) { new ChildController().getDomain("66666"); } }
输出结果:
这是domainID:66666 这是viewPath:hello/world/ 这是tableName:my_table 这是primaryKey:my_id
其实这并不算什么技术,顶多算是技巧,而且除了上面的方法还可以在子类里面做文章
例如下面的方法也行,不过有代码洁癖啊~~~,所以就选用自定义注解了,
如果有更好的方法请赐教啊~,好,收工~ヾ( ̄▽ ̄)Bye~Bye~
public ChildController() { super.viewPath = "hello/world/"; super.tableName = "my_table"; super.primaryKey = "my_id"; }
或者:
@Autowired public void setting() { super.viewPath = "hello/world/"; super.tableName = "my_table"; super.primaryKey = "my_id"; }
相关文章推荐
- Java使用反射、自定义注解注入对象
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- 利用自定义Java注解实现资源注入
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- java 自定义注解验证 (仅限于实体属性值上的注解)
- Java注解(自定义注解、view注入)
- Shiro自定义Realm时用注解的方式注入父类的credentialsMatcher
- java中自定义注解并通过反射获取注解属性值
- 深入理解Java:注解(Annotation)自定义注解入门
- JAVA自定义注解实现SQL语句自动生成DEMO(2)
- Java自定义注解和运行时靠反射获取注解
- java自定义注解
- Java自定义注解和运行时靠反射获取注解
- 深入理解Java:注解(Annotation)自定义注解入门
- Java基础之--反射、自定义注解
- Java注解(Annotation)详解(二)——自定义注解
- 注解:java 自定义注解应用实例
- java自定义注解