導航:首頁 > 編程語言 > 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相關的資料

熱點內容
php和大數據哪個好 瀏覽:928
未來最值得投資的加密貨幣 瀏覽:526
ascii碼是編譯的時候用嗎 瀏覽:779
壓縮機感應包可以通用嗎 瀏覽:410
方舟伺服器怎麼發布到搜索列表 瀏覽:270
xml防反編譯 瀏覽:239
數據傳輸加密系統技術方案 瀏覽:842
程序員沒有準備去面試 瀏覽:4
51單片機usb滑鼠 瀏覽:879
qq伺服器的ip地址查詢 瀏覽:112
java仿qq聊天 瀏覽:400
解壓的ipa重新打包 瀏覽:142
程序員那麼可愛vip版 瀏覽:239
程序員怎麼升職 瀏覽:243
圖形化命令按鈕vb 瀏覽:987
vcu盤加密怎麼設置 瀏覽:415
如何加密備份微信聊天記錄 瀏覽:529
安卓手機如何模擬鍵盤 瀏覽:932
查看dns地址命令 瀏覽:769
android錄屏工具 瀏覽:842