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

来源:互联网 发布:淘宝网为什么打不开了 编辑:程序博客网 时间:2024/06/18 00:21

1. IOC(控制反转)

什么是IOC

  1. ioc控制反转,把对象的创建交给spring管理
  2. ioc操作两部分
    (1)ioc的配置文件方式
    (2)ioc的注解方法

ioc底层原理

  1. ioc底层原理使用技术
    (1)xml配置文件
    (2)dom4j解析xml
    (3)工厂设计模式
    (4)反射

  2. 原理
    第一步:创建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包

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实例化方式

  1. 在spring里通过配置文件创建对象
  2. 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. 创建对象时,向类里的属性设置值
  2. 属性注入的三种方式
    (1)使用set方法注入
    (2)使用有参构造注入
    (3)使用接口注入
  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;    }}
  1. 配置文件注入关系
<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名称空间注入
p名称空间注入

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基础上完成操作

原创粉丝点击