今天小编给大家分享一下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代码
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">t;/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代码
//使用静态工厂方法实例化使用实例工厂方法实例化 //使用静态工厂方法实例化 使用实例工厂方法实例化
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代码
第二种方法
Java代码
为属性配置null值
Java代码
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("我说了"); } } 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
集合依赖注入
Java代码
for(String s : p.getLists){ System.out.println(s); }
1111 2222 3333 4444 for(String s : p.getSets){ System.out.println(s); } TTT YYY for(String key : p.getMaps().keySet()){ System.out.println(key+"="+ p. getMaps ().get(key)); } Properties 是注入 for(Object key : p.getPropers().keySet()){ System.out.println(key+"="+ p.getPropers().get(key)); } value1 value2
以上就是“Spring反射技术怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注创新互联行业资讯频道。