很多人都知道java的反射机制和注解技术。反射(Reflection)就是加载类,并解剖出类的各个组成部分;而Annotation 其实就是代码里的特殊标记, 它用于替代配置文件,也就是说,传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行。那么两者结合能够产生出什么?
首先来看下面一个程序
package cn.lmj.annotation;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
public class Demo01
{
//利用注解的信息生成Connection
@DbInfo(driver="com.mysql.jdbc.Driver",url="jdbc:mysql:///test",username="root",password="root")
public static Connection getConnection()
{
try
{
//反射获得这个方法
Method method = JdbcUtils.class.getMethod("getConnection", new Class[]{});
//反射方法是是否有这个注解
DbInfo info = method.getAnnotation(DbInfo.class);
if(info != null)
{
String driver = info.driver();
String url = info.url();
String username = info.username();
String password = info.password();
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
return null;
}
catch (Exception e)
{
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void main(String[] args)
{
System.out.println(getConnection());
}
}
package cn.lmj.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Field;
public class Person
{
//通过注解注入对象
@Inject(name="cn.lmj.annotation.Book")
private Book book;
public Book getBook()
{
return this.book;
}
public static void main(String[] args)
{
//对象由工厂产生
Person p = Factory.getBean(Person.class);
System.out.println(p.getBook());
}
}
class Book
{
}
@Retention(RetentionPolicy.RUNTIME)
@interface Inject
{
String name();
}
//工厂对象
class Factory
{
//产生对象
public static
T getBean(Class
clazz)
{
try
{
Object obj = clazz.newInstance();
Field[] fields = obj.getClass().getDeclaredFields();
for(int i = 0;fields!=null && i
在这个代码中,Person类的Book对象由方法注解上的信息产生实例对象,从而利用反射注进去,这个例子充分体现了软件开发的解耦思想,Person类的Book对象由工厂产生和维护,并且必要时可以切换Book类的实例(在实际开发我们是面向接口编程,可以随意切换子类)。在spring中的注解bean中大量用到了这个技术,我们的应用集成了spring的开发环境,我们发现程序中需要其他的对象时候,不需要new,而是轻轻的写个注解,对象就注进去了,通过这个例子,我们对spring的注解bean有进一步的认识,并且自己能够实现这样的功能,让我们以后在开发的过程中能够很自信的利用spring的注解bean,下次将给大家讲解spring的aop原理和开发中应用。