导航:首页 > 编程语言 > java反射spring

java反射spring

发布时间:2023-02-13 10:56:36

java 中 父类写初始化代码 反射获取类中的所有属性 并按照某种逻辑赋值(我是为了初始化Spring中的Bean)

这种想法是不可能实现的,父类中是获取不到子类的属性的,你需要换一个思路解决问题。

Ⅱ 教你手写spring框架(一)

   spring框架的原理其实主要是dom4j+反射+xml.原理就是将xml用dmo4j解析,然后取出xml中的元素赋值到实体类中,实体类用反射机制获取其中的属性。下面具体来说明一下。

首先创建一个UserEntity的实体类.


第一步:创建一个实体类


<?xml version="1.0" encoding="UTF-8"?>
<beans>
 <bean id="user1" class="entity.UserEntity">
  <property name="userId" value="0001"></property>
  <property name="userName" value="余胜军"></property>
 </bean>
 <bean id="user2" class="entity.UserEntity">
  <property name="userId" value="0002"></property>
  <property name="userName" value="张三"></property>
 </bean>
</beans>



第二步:手写一个简单的xml

<?xml version="1.0" encoding="UTF-8"?> 
<students> 
    <student1 id="001"> 
        <>@听风_与你</> 
        <学号>20140101</学号> 
        <地址>上海市浦东新区世纪大道</地址> 
        <座右铭>要么强大,要么听话</座右铭> 
    </student1> 
    <student2 id="002"> 
        <>@听风_与你</> 
        <学号>20140102</学号> 
        <地址>上海市浦东新区世纪大道</地址> 
        <座右铭>自信不自大,失败不气馁,倒了爬起来</座右铭> 
    </student2> 
</students>


第三步:创建一个解析xml并且反射将值赋值的类。

package classForm;

import java.lang.reflect.Field;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import entity.UserEntity;

public class {
 private String xmlPath;

 public (String xmlPath) {
  this.xmlPath = xmlPath;
 }

 public Object getBean(String beanId) throws Exception {
  // 解析xml器
  SAXReader saxReader = new SAXReader();
  Document read = null;
  try {
   // 从项目根目录路径下 读取
   read = saxReader.read(this.getClass().getClassLoader()
     .getResourceAsStream(xmlPath));
  } catch (Exception e) {
   e.printStackTrace();
  }
  if (read == null) {
   return null;
  }
  // 获取根节点资源
  Element root = read.getRootElement();
  List<Element> elements = root.elements();
  if (elements.size() <= 0) {
   return null;
  }
  Object oj = null;
  for (Element element : elements) {
   String id = element.attributeValue("id");
   if (StringUtils.isEmpty(id)) {
    return null;
   }
   if (!id.equals(beanId)) {
    continue;
    // throw new Exception("使用beanId:" + beanId + ",未找到该bean");
   }
   // 获取实体bean class地址
   String beanClass = element.attributeValue("class");
   // 使用反射实例化bean
   Class<?> forNameClass = Class.forName(beanClass);
   oj = forNameClass.newInstance();
   // 获取子类对象
   List<Element> attributes = element.elements();
   if (attributes.size() <= 0) {
    return null;
   }
   for (Element et : attributes) {
    // 使用反射技术为方法赋值
    String name = et.attributeValue("name");
    String value = et.attributeValue("value");
    Field field = forNameClass.getDeclaredField(name);
    field.setAccessible(true);
    field.set(oj, value);

   }

  }
  return oj;
  // 1.使用beanId查找配置文件中的bean。
  // 2.获取对应bean中的classpath配置
  // 3.使用java反射机制实体化对象Class
 }
 
 public static void main(String[] args) throws Exception {
   applicationContext = new (
    "applicationContext.xml");
  UserEntity bean = (UserEntity) applicationContext.getBean("user2");
  System.out.println("使用反射获取bean" + bean.getUserId() + "---" + bean.getUserName());

 }
}


当然这是最简单的手写spring.这是原理.希望各位有什么好建议提出来,虚心求教。

Ⅲ spring的原理是什么

一、 IoC(Inversion of control): 控制反转x0dx0a1、IoC:x0dx0a概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系x0dx0a核心:bean工厂;在Spring中,bean工厂创建的各个实例称作beanx0dx0a二、AOP(Aspect-Oriented Programming): 面向方面编程 。x0dx0a1、 代理的两种方式:x0dx0a静态代理:x0dx0a针对每个具体类分别编写代理类。x0dx0a针对一个接口编写一个代理类。x0dx0a动态代理:x0dx0a针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类 。x0dx0a2、 AOP的主要原理:动态代理 。x0dx0aSpring工作原理x0dx0aSpring 已经用过一段时间了,感觉Spring是个很不错的框架。内部最核心的就是IOC了,x0dx0a动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射 ,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置 文件来动态的创建对象,和调用对象里的方法的 。x0dx0aSpring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。x0dx0aSpring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象)x0dx0a要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。x0dx0aSpring里用的最经典的一个设计模式就是:模板方法模式。

Ⅳ 4.Spring中的反射

Java语言允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数、属性和方法等。Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,这就为使用程序化方式操作Class对象开辟了途径。
———— stamen

阅读全文

与java反射spring相关的资料

热点内容
小奔运动app网络异常怎么回事 浏览:447
php开启压缩 浏览:303
服务器主机如何设置启动 浏览:282
linux配置网络命令 浏览:774
一张照片怎么制作视频app 浏览:908
pythonweb和php 浏览:976
电脑服务器地址ip地址 浏览:823
对矩阵压缩是为了 浏览:910
setfacl命令 浏览:172
linux子系统中断 浏览:342
linux查看进程ps 浏览:224
知识库系统php 浏览:623
小波变换压缩图像python 浏览:151
阿里巴巴程序员怎么月入百万 浏览:173
如何使用国外服务器 浏览:188
燃灯者pdf 浏览:468
编译器用数学吗 浏览:7
图形化apk反编译工具 浏览:48
考勤表加密怎么办 浏览:736
arj压缩与解压批处理怎么写 浏览:659