标签:常用 复杂 app work scope 部分 获取对象 下载 except
package cn.cbb.ioc; public class User { public void add() { System.out.println("add ..."); } public static void main(String[] args) { /** * 调用类中的方法,原始做法是创建类对象,用对象调用方法;而现在则不再这样做了, * 而是将对象的创建过程交给spring来配置实现,但是底层用的肯定是反射,我们不需 * 要写反射代码,由spring代我们做此操作 */ User user = new User(); user.add(); } }
<?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.xsd"> <!-- ioc入门,配置对象的创建 --> <bean id="user" class="cn.cbb.ioc.User"></bean> </beans>
package cn.cbb.ioc; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class IOCTest { @Test public void IOCTest() { //1、加载spring配置文件,根据配置创建对象 ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); //2、得到配置创建的对象 User user = (User) context.getBean("user"); System.out.println(user); user.add(); } }
Spring引入schema约束,把约束文件引入到eclipse中,以便配置文件编写提示:
<!-- ioc入门,配置对象的创建 --> <bean id="user" class="cn.cbb.ioc.User"></bean>
对象对应的类中,若没有无参构造(定义了有参构造),则将出现异常:
org.springframework.beans.factory.BeanCreationException:...No default constructor found;...
<!-- 使用静态工厂创建对象 --> <bean id="bean2Factory" class="cn.cbb.bean.Bean2Factory" factory-method="getBean2"></bean>
package cn.cbb.bean; public class Bean2Factory { //静态方法返回Bean2对象 public static Bean2 getBean2() { return new Bean2(); } }
<!-- 使用实例工厂创建对象 --> <!-- 首先,创建工厂对象 --> <bean id="bean3Factory" class="cn.cbb.bean.Bean3Factory"></bean> <!-- 其次,通过实例化的工厂对象的方法来创建对象bean3 --> <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
package cn.cbb.bean; public class Bean3Factory { //普通方法返回Bean3对象 public Bean3 getBean3() { return new Bean3(); } }
User user1 = (User) context.getBean("user"); User user2 = (User) context.getBean("user"); System.out.println(user1); System.out.println(user2);
<!-- 默认scope="singleton" --> <bean id="user" class="cn.cbb.ioc.User"></bean>
cn.cbb.ioc.User@b7dd107
cn.cbb.ioc.User@b7dd107
<!-- scope="prototype"测试 --> <bean id="user" class="cn.cbb.ioc.User" scope="prototype"></bean>
cn.cbb.ioc.User@b7dd107
cn.cbb.ioc.User@42eca56e
<!-- 使用set方法注入属性 --> <bean id="book" class="cn.cbb.property.Book"> <!-- 注入属性之: name属性值:类中的属性名称; value属性:设置的具体值 --> <property name="bookName" value="红楼梦"></property> </bean>
package cn.cbb.property; public class Book { private String bookName; //set方法 public void setBookName(String bookName) { this.bookName = bookName; } public void testBook() { System.out.println("bookName通过set注入值为:"+bookName); } }
<!-- 使用有参数构造注入属性 --> <bean id="propertyDemo1" class="cn.cbb.property.PropertyDemo1"> <constructor-arg name="userName" value="小码"></constructor-arg> </bean>
package cn.cbb.property; public class PropertyDemo1 { private String userName; public PropertyDemo1(String userName) { this.userName = userName; } public void test1() { System.out.println("userName通过有参构造注入值为:"+userName); } }
package cn.cbb.ioc; public class UserService { //定义dao类型属性 private UserDao userDao; //生成set方法,在service中得到dao对象,就可以调用dao中的方法 public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void add() { System.out.println("service add ..."); userDao.add(); } }
<!-- 注入对象类型的属性 --> <!-- 配置service和dao对象 --> <bean id="userDao" class="cn.cbb.ioc.UserDao"></bean> <bean id="userService" class="cn.cbb.ioc.UserService"> <!-- 注入dao对象: name属性值:service中的属性名称,对象类型属性就不要写value了,用ref属性:dao配置bean的id值 --> <property name="userDao" ref="userDao"></property> </bean>
package cn.cbb.property; public class Person { private String pname; public void setPname(String pname) { this.pname = pname; } public void testP() { System.out.println("P名称空间注入pname值为"+pname); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" 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.xsd"> <!-- P名称空间注入 --> <bean id="person" class="cn.cbb.property.Person" p:pname="小张"></bean> </beans>
package cn.cbb.property; import java.util.List; import java.util.Map; import java.util.Properties; public class Animal { private String[] arrs; private List<String> list; private Map<String,String> map; private Properties properties; public void setArrs(String[] arrs) { this.arrs = arrs; } public void setList(List<String> list) { this.list = list; } public void setMap(Map<String, String> map) { this.map = map; } public void setProperties(Properties properties) { this.properties = properties; } public void testAnimal() { System.out.println("复杂数据注入arrs:"+arrs); System.out.println("复杂数据注入list:"+list); System.out.println("复杂数据注入map:"+map); System.out.println("复杂数据注入properties:"+properties); } }
<!-- 注入复杂类型属性值 --> <bean id="animal" class="cn.cbb.property.Animal"> <!-- 数组 --> <property name="arrs"> <list> <value>小王</value> <value>小李</value> <value>小张</value> </list> </property> <!-- list --> <property name="list"> <list> <value>奥迪</value> <value>宝马</value> <value>奔驰</value> </list> </property> <!-- map --> <property name="map"> <map> <entry key="aa" value="lucy"></entry> <entry key="bb" value="lili"></entry> <entry key="cc" value="tom"></entry> </map> </property> <!-- properties --> <property name="properties"> <props> <prop key="driverclass">com.mysql.jdbc.Driver</prop> <prop key="username">root</prop> </props> </property> </bean>
//1、加载spring配置文件,根据配置创建对象 ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
new对象,功能可以实现,但是效率太低!
Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)
标签:常用 复杂 app work scope 部分 获取对象 下载 except
原文地址:http://www.cnblogs.com/cb0327/p/6403931.html