Spring​反射技术怎么用

发布时间:2022-01-12 22:29:25 作者:iii
来源:亿速云 阅读:172

今天小编给大家分享一下Spring反射技术怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

无参数的

Java代码

Class.forName(className).newInstance;     //有参数的     Class.forName(className).getDeclaredConstructor(String.class).newInstance(“黎明”);     //通过反射获取属性     Introspector.getBeanInfo(Person.class).getPropertyDescriptors()     //通过反射机制修改bean属性的值     Person person=(Person)Class.forName(className).getDeclaredConstructor(String.class).newInstance("黎明");     PropertyDescriptor[] ps = Introspector.getBeanInfo(Person.class).getPropertyDescriptors();     for(PropertyDescriptor p :ps){     System.out.println(p.getName());     if(p.getName().equals("name")){     Method setter=p.getWriteMethod();     if(setter!=null){     setter.setAccessible(true);//允许访问private属性     setter.invoke(person, "小燕子");         //通过反射机制修改bean字段的值     Field field=Person.class.getDeclaredField("name");     field.setAccessible(true);//允许访问private字段     field.set( person , "sss");              Class.forName(className).newInstance;  //有参数的  Class.forName(className).getDeclaredConstructor(String.class).newInstance(“黎明”);  //通过反射获取属性  Introspector.getBeanInfo(Person.class).getPropertyDescriptors()  //通过反射机制修改bean属性的值  Person person=(Person)Class.forName(className).getDeclaredConstructor(String.class).newInstance("黎明");  PropertyDescriptor[] ps = Introspector.getBeanInfo(Person.class).getPropertyDescriptors();  for(PropertyDescriptor p :ps){  System.out.println(p.getName());  if(p.getName().equals("name")){  Method setter=p.getWriteMethod();  if(setter!=null){  setter.setAccessible(true);//允许访问private属性  setter.invoke(person, "小燕子");   //通过反射机制修改bean字段的值  Field field=Person.class.getDeclaredField("name");  field.setAccessible(true);//允许访问private字段  field.set( person , "sss");

Spring提供了声明式的事务管理

软件的解耦合,不是硬编码

Spring 需要的jar

Dist\spring.jar

lib\jakarta-commons\commons-logging.jar

如果使用了切面编程(AOP),还需要下列jar文件

lib/aspectj/aspectjweaver.jar和aspectjrt.jar   lib/cglib/cglib-nodep-2.1_3.jar

如果使用了JSR-250中的注解,如@Resource/@PostConstruct/@PreDestroy,还需要下列jar文件

lib\j2ee\common-annotations.jar

配置文件beans.xml

Java代码

<?xml version="1.0" encoding="UTF-8"?>     t;beans xmlns="http://www.springframework.org/schema/beans"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://www.springframework.org/schema/beans              http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">         <bean id="xx" class="junit.test.Person" lazy-init="true">     </bean>     t;/beans>       <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">    <bean id="xx" class="junit.test.Person" lazy-init="true">   </bean> </beans>

怎么启动spring容器Java代码

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");     Person s = (Person)context.getBean("xx");        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");  Person s = (Person)context.getBean("xx");


默认bean是容器启动时实例化,只在容器中创建一次,spring中的对象一直存在容器中,是单例模式

表 3.4. Bean作用域

作用域       描述
singleton    在每个Spring IoC容器中一个bean定义对应一个对象实例。
prototype    一个bean定义对应多个对象实例。
request       在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。
session        在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global session     在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。

Spring入门—利用工厂方法创建bean

Java代码 

public class PersonFactory {     public static Person createPerson(){         return new Person();     }     public Person createPerson2(){         return new Person();     }        public class PersonFactory {   public static Person createPerson(){    return new Person();   }   public Person createPerson2(){    return new Person();   }  }

Java代码

//使用静态工厂方法实例化     <bean id="person" class="bean.PersonFactory" factory-method="createPerson"></bean>     使用实例工厂方法实例化     <bean id="personFactory" class="bean.PersonFactory"></bean>      <bean id="person2" factory-bean="personFactory" factory-method="createPerson2"></bean>         //使用静态工厂方法实例化  <bean id="person" class="bean.PersonFactory" factory-method="createPerson"></bean> 使用实例工厂方法实例化  <bean id="personFactory" class="bean.PersonFactory"></bean>  <bean id="person2" factory-bean="personFactory" factory-method="createPerson2"></bean>

Spring入门—依赖注入

Java代码

public class Person {             private Integer id;         private String name="aa";         private IDCard idcard;                  public IDCard getIdcard() {             return idcard;         }             public void setIdcard(IDCard idcard) {             this.idcard = idcard;         }             public Person(String name) {             this.name = name;         }                  public Person() {         }         public Integer getId() {             return id;         }         public void setId(Integer id) {             this.id = id;         }         public String getName() {             return name;         }         public void setName(String name) {             this.name = name;         }              }     public class IDCard {         private String no;             public String getNo() {             return no;         }             public void setNo(String no) {             this.no = no;         }     }         public class Person {    private Integer id;   private String name="aa";   private IDCard idcard;      public IDCard getIdcard() {    return idcard;   }    public void setIdcard(IDCard idcard) {    this.idcard = idcard;   }    public Person(String name) {    this.name = name;   }      public Person() {   }   public Integer getId() {    return id;   }   public void setId(Integer id) {    this.id = id;   }   public String getName() {    return name;   }   public void setName(String name) {    this.name = name;   }     }  public class IDCard {   private String no;    public String getNo() {    return no;   }    public void setNo(String no) {    this.no = no;   }  }


***种方法
Java代码

<bean id="xx" class="junit.test.Person" lazy-init="true">     <property name="idcard">     <bean class="junit.test.IDCard">        <property name="no" value="9999"></property>        </bean>      </property>     </bean>       <bean id="xx" class="junit.test.Person" lazy-init="true">   <property name="idcard">   <bean class="junit.test.IDCard">      <property name="no" value="9999"></property>      </bean>    </property>   </bean>

第二种方法

Java代码 

<bean id="aa" class="junit.test.IDCard">     <property name="no" value="88888888"></property>     </bean>      <bean id="xx" class="junit.test.Person" lazy-init="true">       <property name="idcard" ref="aa">             </property>       </bean>    <bean id="aa" class="junit.test.IDCard"> <property name="no" value="88888888"></property> </bean> <bean id="xx" class="junit.test.Person" lazy-init="true">   <property name="idcard" ref="aa">   </property>   </bean>

为属性配置null值

Java代码 

<property name="name"><null/></property>             public class Person {         private String name="ss";     public Person(){}         public Person(String name) {             this.name = name;         }         public String getName() {             return name;         }         public void setName(String name) {             this.name = name;         }                  public void say(){             System.out.println("我说了");         }     }      <property name="name"><null/></property>   public class Person {   private String name="ss";  public Person(){}   public Person(String name) {    this.name = name;   }   public String getName() {    return name;   }   public void setName(String name) {    this.name = name;   }      public void say(){    System.out.println("我说了");   }  }

初始化bean执行say方法相当于测试单元的@BeforeClass

<bean id="xxx" class="bean.Person" scope="singleton" lazy-init="false" init-method="say">

集合依赖注入

Java代码 

<property name="lists">              <list>                 <value>1111</value>                 <value>2222</value>                 <value>3333</value>                 <value>4444</value>              </list>     </property>     for(String s : p.getLists){                 System.out.println(s);             }     <property name="sets">              <set>                 <value>TTT</value>                 <value>YYY</value>               </set>     </property>     for(String s : p.getSets){                 System.out.println(s);             }         <property name="maps">           <map>                 <entry key="key1" value="value1"></entry>                 <entry key="key2" value="value2"></entry>            </map>     </property>     for(String key : p.getMaps().keySet()){                 System.out.println(key+"="+ p. getMaps ().get(key));             }     Properties 是注入     <property name="propers">            <props>                 <prop key="proper1">value1</prop>                 <prop key="proper2">value2</prop>            </props>     </property>     for(Object key : p.getPropers().keySet()){                 System.out.println(key+"="+ p.getPropers().get(key));             }

以上就是“Spring反射技术怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

推荐阅读:
  1. java反射技术
  2. 关于反射技术的实际应用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring

上一篇:Java的Model2应用怎么实现

下一篇:软件测试中黑盒测试和白盒测试的优缺点有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》