您的位置:首页 > 编程语言 > Java开发

Spring配置入门案例(配置文件方式)

2017-07-13 21:30 525 查看

1. IOC(控制反转)

什么是IOC

ioc控制反转,把对象的创建交给spring管理

ioc操作两部分

(1)ioc的配置文件方式

(2)ioc的注解方法

ioc底层原理

ioc底层原理使用技术

(1)xml配置文件

(2)dom4j解析xml

(3)工厂设计模式

(4)反射

原理

第一步:创建xml文件,配置要创建的对象

<bean id="user" class="cn.wang.ioc.User">


第二步:创建工厂类,使用dom4j解析配置文件,反射创建对象

//1.使用dom4j解析xml文件
//根据id值user,得到id值对应的class属性值
String classValue="class属性值";
//2.使用反射创建对象
Class clazz=Class.forName(classValue);
//创建对象
User user=clazz.newInstance();
return user


ioc入门案例

第一步:导入jar包



做spring最基本功能是,导入Beans,Core,Context,SpEL四个核心jar包即可

第二步:创建类,在类里创建方法

public class User{
public void add(){
System.out.println("add()");
}
}


第三步:创建spring配置文件,配置创建类

(1) spring的核心配置文件的名称和位置是不固定的,建议放在src目录下,官方建议文件名:applicationContext.xml

(2)引入schema约束

<?xml version="1.0"?>
<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">


(3) 配置创建类

<bean id="user" class="cn.wang.ioc.User"></bean>


第四步:测试对象的创建

public class TestIoc {
@Test
public void testPerson() {
// 1.加载Spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext(
"bean1.xml");
// 2.得到配置文件创建的对象
Person person = (Person) context.getBean("person");
System.out.println(person);
}
}


spring的bean管理(xml方式)

bean实例化方式

在spring里通过配置文件创建对象

bean实例化的三种方式

第一种:使用类的无参构造方法创建(前提有无参构造)

<bean id="user" class="cn.wang.ioc.User"></bean>


第二种:使用静态工厂创建对象

(1)创建静态工厂类

//Person的静态工厂
public class PersonFactory {
// 静态方法,返回Person对象
public static Person getInstance() {
return new Person();
}
}


(2)配置文件配置静态工厂

<bean id="person" class="cn.wang.property.PersonFactory"
factory-method="getInstance"></bean>


第三种:使用实例工厂创建对象

(1)创建实例工厂类

//Person的实例工厂
public class PersonFactory {
public Person getInstance() {
return new Person();
}
}


(2)配置文件配置实例工厂

<bean id="personFactory" class="cn.wang.property.PersonFactory"></bean>
<bean id="person" factory-bean="personFactory"
factory-method="getInstance"></bean>


bean标签常用属性

1. id属性

id属性址名称任意命名

id属性值不包含特殊符号

根据id得到配置对象

2. class属性

创建对象所在类的全路径

3. name属性

功能与id相同,但是可以包含特殊符号

4. scope属性

(1) singtleton:默认值,单例

Person p1 = (Person) context.getBean("person");
Person p2 = (Person) context.getBean("person");


多次调用返回同一对象

(2)prototype:多例,多次调用返回不同对象

(3)request:创建对象放到request域中

(4)session:创建对象方法哦session域中

(5)globalSession:创建对象放到globalSession域中

2. DI(依赖注入)

什么是DI

创建对象时,向类里的属性设置值

属性注入的三种方式

(1)使用set方法注入

(2)使用有参构造注入

(3)使用接口注入

spring框架中支持前两种方式

(1)使用set方法注入

<bean id="person" class="cn.wang.property.Person">
<!--set方法注入属性
name属性值:类中定义的属性名称
value属性值:设置具体的值
-->
<property name="pname" value="zs"></property>
</bean>


(2)使用有参构造注入

public class Person {
private String pname;

public void setPname(String pname) {
this.pname = pname;
}

}


<bean id="user" class="cn.wang.ioc.User">
<!--构造方法注入属性-->
<constructor-arg name="pname" value="Tony"></constructor-arg>
</bean>


(3)注入对象类型属性

1. 创建service和dao类

在service中得到dao

2. 具体实现过程

在service中把dao作为属性

生成dao的set方法

public class UserService {
// 1.定义UserDao类型属性
private UserDao userDao;

// 2.生成set方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}


配置文件注入关系

<bean id="userDao" class="cn.wang.property.UserDao">
<property name="name" value="Tom"></property>
</bean>
<bean id="userService" class="cn.wang.property.UserService">
<!--name属性值:UserService类里的属性名称-->
<!--ref属性:UserDao类配置bean标签中的id值-->
<property name="userDao" ref="userDao"></property>
</bean>


(4)p名称空间注入





(5)注入复杂类型属性

<!-- 注入复杂类型属性值 -->
<!--
String pname;
String[] arrs;
List<String> list;
Map<String, String> map;
Properties props;
-->
<bean id="person" class="cn.wang.property.Person">
<property name="pname" value="zs"></property>
<property name="arrs">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<property name="list">
<list>
<value>qqq</value>
<value>www</value>
<value>eee</value>
</list>
</property>
<property name="map">
<map>
<entry key="001" value="Tom"></entry>
<entry key="002" value="Amy"></entry>
<entry key="003" value="Jim"></entry>
</map>
</property>
<property name="props">
<props>
<prop key="username">admin</prop>
<prop key="passwprd">admin</prop>
</props>
</property>
</bean>


3. IOC和DI区别

(1)IOC控制反转,把对象创建交给spring配置

(2)DI依赖注入,向类里面属性注入值

(3)关系,依赖注入不能单独存在,需要在IOC基础上完成操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring ioc