ioc和aop的概念,解决层与层之间的依赖关系以及重复业务的处理毕业设计论文正文(编辑修改稿)内容摘要:

oolean recursive=true。 //将包名从以 .隔开换成以 /隔开 String packageName=packages。 String packageToDir=(., /)。 //(packageToDir)。 //定义一个枚举的集合循环处理该目录下的所有东西 EnumerationURL dirs。 try { dirs=().getContextClassLoader().getResources(packageToDir)。 //循环迭代 while(()){ //获取下一个元素 URL url=()。 //获取协议名 String protocal=()。 //如果是文件形式保存在服务器上 if(file.equals(protocal)){ //(file类型的扫描 )。 //获取包的物理路劲 String physicsPath=((), utf8)。 //(physicsPath)。 //以文件 方式扫描整个包下的文件并添加到集合中 findAndAddClassesInPackageByFile(packageName,physicsPath,recursive,classes)。 }else if(jar.equals(protocal)){ //如果是 jar文件,则定义一个 jarFile JarFile jar。 try { //获取 jar jar=((JarURLConnection)()).getJarFile()。 //从此 jar包中获取一个枚举类 EnumerationJarEntryentries=()。 //同样进行循环迭代 while(()){ //获取 jar里的一个实体,可以是目录和一些 jar包里的其他文件,如 METAINF等文件 JarEntry entry=()。 String name=()。 //如果以 /开头 本科毕业设计说明书(论文) 第 12 页 共 28 页 if((0)==39。 /39。 ){ //获取 /后的字符串 name=(1)。 } //如果前半部分与定义的包名相同 if((packageToDir)){ //若以 /结尾是一个包 int index=(/)。 if(index!=1){ //获取包名且把 /替换成 . packageName=(0,index).replace(/, .)。 } //若可迭代下去且是一个包 if((index!=1)||recursive){ if((.class)amp。 amp。 !()){ //去掉 .class获取正真的类名 String className=(()+1,()6)。 try { //添加到 classes中 ((packageName+.+className))。 } catch (Exception e) { ()。 } } } } } }catch (Exception e) { ()。 } } } } catch (Exception e) { ()。 } return classes。 } 接着就是对工厂的初始化。 具体代码如下: public void init() { //获取配置文件中的包信息 本科毕业设计说明书(论文) 第 13 页 共 28 页 String packageInfo=().getPackage()。 //(packageInfo)。 //获取包下的所有 class SetClass?classes=getClasses(packageInfo)。 //(())。 for (Class? cls : classes) { //判断是否存在 Component注解 if(()){ //获取注解对象 Component ponent=()。 //获取注解 name的属性值 String Name=()。 try { //判断注解 Name是否为空 if(()){ //如果为空将 Name设置为类名的小写 Name=()。 Name=(0,1).toLowerCase()+(1)。 //(Name)。 } //最终将处理后或未处理的类名对应的实例存入 cms中 (Name, ())。 } catch (Exception e) { ()。 } } } } 接下来则是在程序运行过程中,对存在 @Property 注解的属性进行属性注入,获取其对应的实例对象。 具体代码如下: public T T getObject(String name,ClassT cz){ T target=(T)(name)。 //获取组件时首先要判断该组件是否存在 if(target==null){ throw new RuntimeException(对象不存在 )。 } //如果对象存在,则要判断对象是否需要注入属性,如果需要注入属性,则先注入属性在返回对象 Field []fields=().getDeclaredFields()。 for (Field field : fields) { 本科毕业设计说明书(论文) 第 14 页 共 28 页 //判断该属性是否存在 Property注解 if(()){ //获取属性名 String fieldName=()。 Property pro=(Property)()。 String ref=()。 //判断 ref是否为空 if(()){ ref=fieldName。 } //获取 set方法的名称 String methodName=set+(0,1).toUpperCase()+(1)。 try { Method m=(methodName, ())。 (target, (ref, ()))。 } catch (Exception e) { ()。 } //target=(fieldName, cz)。 } } if(().isAnnotationPresent()){ Interception inter=().getAnnotation()。 //拦截的方法 String methods[]=()。 SpringInterceptor mi=null。 try { mi=(SpringInterceptor)(interceptionName).newInstance()。 (methods)。 (().newInstance())。 } catch(ClassNotFoundException e){ ()。 }catch (InstantiationException e) { // TODO Autogenerated catch block ()。 } catch (IllegalAccessException e) { // TODO Autogenerated catch block ()。 } return (T)()。 } return target。 } 本科毕业设计说明书(论文) 第 15 页 共 28 页 在属性注入的同时会判断该属性是否存在拦截器以及要拦截的方法。 接下来则是利用 AOP实现拦截器功能。 AOP实现(拦截器) 对于拦截器, 其实就是代理模式的具体实现, 首先需实现 InvocationHandler 接口, 该接口 是代理实例的调用处理程序实现的接口。 对于各个代理实例都被联接了具体的处理程序代码。 在代理实例调用处理程序时,将对该程序方法编码设置且将其指派到它的 invoke 方法。 以下是实现 InvocationHandler 的抽象类,该类需要一个目标对象及该目标对象需要拦截的方法。 具体代码如下: public abstract class SpringInterceptor implements InvocationHandler { //目标对象 private Object target。 //所要拦截的方法 private String[] methodsName。 p。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。