使用工厂模式+反射创建对象

项目结构

1.配置文件
config,properties
packageName = com.woniu.dao.impl
2.自定义注解
package com.woniu.util; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface EnableDao { }
3,定义动物接口,实现类,并在某一个类上添加注解
package com.woniu.dao; public interface Animal { public void eat(); }
package com.woniu.dao.impl; import com.woniu.dao.Animal; public class Cat implements Animal{ @Override public void eat() { System.out.println("猫吃鱼"); } }
package com.woniu.dao.impl; import com.woniu.dao.Animal; import com.woniu.util.EnableDao; @EnableDao public class Dag implements Animal { @Override public void eat() { System.out.println("狗吃骨头"); } }
package com.woniu.dao.impl; import com.woniu.dao.Animal; public class Pig implements Animal{ @Override public void eat() { // TODO Auto-generated method stub } }
3定义工厂类
package com.woniu.util; import java.io.File; import java.io.InputStream; import java.net.URI; import java.net.URL; import java.util.Properties; import com.woniu.dao.Animal; public class Factory { public Animal getAnimal() { Properties properties = new Properties(); Animal instance=null; try(InputStream in = Factory.class.getClassLoader().getResourceAsStream("config2.properties")) { properties.load(in); //得到包名 String packageName = properties.getProperty("packageName"); //获取包的完整路径 URL url = Factory.class.getClassLoader().getResource(packageName.replace('.', File.separatorChar)); URI uri = new URI(url.toString()); File file = new File(uri); //获取包下的所有类 String[] lists = file.list(); for(String list:lists) { //拼凑类名 String className = packageName + "."+list.substring(0, list.lastIndexOf(".")); Class<?> clazz = Class.forName(className); if(clazz.isAnnotationPresent(EnableDao.class)) { instance =(Animal) clazz.newInstance(); } } } catch (Exception e) { // TODO: handle exception } return instance; } }
Main类
package com.woniu.main; import com.woniu.dao.Animal; import com.woniu.util.Factory; public class MainApp { public static void main(String[] args) { Factory factory = new Factory(); Animal animal = factory.getAnimal(); animal.eat(); } }

浙公网安备 33010602011771号