Spring(1)

实体类

package pojo;

public class User {
    private String name;
    private Integer age;
    private String sex;
    private Car car;



    public User() {
        System.out.println("空参构造");
    }

    public User(String name, String sex, String age) {

    }

    private void inti(){
        System.out.println("初始方法");
    }
    public void destroy(){
        System.out.println("销毁方法");
    }
    public void a(){
        System.out.println("我是"+name+",今年"+age+"岁"+",是个"+sex+"孩子。");
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}


package pojo;

public class Car {
    private String brand;//品牌
    private String color;

    public void b(){
        System.out.println(brand+color);
    }

    public Car() {
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

1.Spring的bean创建方式

<?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">

 <!-- bean的三种创建方式:-->
    <!-- 1.空参构造:-->
    <bean name = "user01" class="pojo.User">
    </bean>
    <!-- 2.静态工厂创建-->
    <bean name="userFactory01" class = "demo2.UserFactory01"
          factory-method="getUser"></bean>
    <!-- 3.实例工厂 -->
    <bean name="userFactory02" class="demo2.UserFactory02"></bean>
    <bean name="getbean" factory-bean="userFactory02" factory-method="getUser"></bean>

</beans>

public class UserFactory01 {
    /**
     * 静态方法
     * @return
     */
    public static User getUser(){
        System.out.println("静态工厂");
        return new User();
    }
}

public class UserFactory02 {
    public User getUser(){
        System.out.println("实例工厂");
        return new User();
    }
}

测试类

public class Demo2Test01 {
    public static void main(String[] args) {
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("demo2/spring-config.xml");

        // 1.空参构造方法创建
        User u1 = (User) ac.getBean("user01");
        System.out.println(u1);

        // 2.静态工厂创建
        User u2 = (User) ac.getBean("userFactory01");
        System.out.println(u2);

        // 3.实例工厂创建
        User u3 = (User) ac.getBean("getbean");
        System.out.println(u3);
    }
}

2.Bean的生命周期

通过配置标签上的 init-method 作为 Bean 的初始化的时候执行的方法,配置 destroy-method 作为 Bean 的销毁的时候执行的方法。 销毁方法想要执行,需要是单例创建的 Bean 而且在工厂关闭的时候,Bean 才会被销毁.
<?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">

    <bean name="user1" class="pojo.User" scope="singleton"
    init-method="inti" destroy-method="destroy">
        <property name="name" value="小明"/>
        <property name="age" value="21"/>
        <property name="sex" value="男"/>
    </bean>
</beans>

测试类

public class Test {
    public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        User user1 = (User) context.getBean("user1");
        user1.a();
        ((ClassPathXmlApplicationContext)context).close();
    }
}

3.Bean的scope属性

*掌握

singleton:默认值,单例的.
prototype:多例的.

*了解
request:WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.

session:WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.

globalSession :WEB 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那么 globalSession 相当
于 session.

4.bean注入方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean name="car" class="pojo.Car">
      <property name="brand" value="兰博基尼"/>
      <property name="color" value="黑色"/>
   </bean>

   <!-- 1.set注入:
      property标签配置属性及属性值:
         name:属性
         value:属性值
   -->
   <bean name="user01" class="pojo.User">
      <property name="name" value="张三"></property>
      <property name="age" value="20"></property>
      <property name="car" value="#{car}"></property>

    </bean>
   <!-- 2.构造方法注入:-->
   <!-- constructor-arg :
            name:属性
            value:属性值
            注:对应的类必须有对应的构造方法(参数的顺序不要求)
      -->
   <bean name="user02" class="pojo.User">
      <constructor-arg name="name" value="李四"></constructor-arg>
      <constructor-arg name="sex" value="男"></constructor-arg>
      <constructor-arg name="age" value="20"></constructor-arg>
   </bean>
   <!-- 3.p标签注入-->
   <bean name="user03" class="pojo.User" p:name="王五" p:age="19">
   </bean>
   <!-- 4.spel注入-->
   <bean name="user04" class="pojo.User">
      <property name="name" value="#{'赵四'}"></property>
   </bean>

</beans>

测试类

/**
 * 注入(给属性赋值)
 */
public class Demo3Test {
    public static void main(String[] args) {
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("vp/lu/demo3/spring-config.xml");

        // 1.set注入
        User user01 = (User) ac.getBean("user01");
        user01.a();

        // 2.构造方法注入
        User user02 = (User) ac.getBean("user02");
        user02.a();

        // 3.p命名空间注入
        User user03 = (User) ac.getBean("user03");
        user03.a();

        // 3.spel注入
        User user04 = (User) ac.getBean("user04");
        user04.a();
    }
}

5.简单类型、引用类型、复杂类型的注入

实体类
public class CollectionDemo {

    private Object[] arr;// 数组
    private List list;// list集合
    private Map map;// map集合
    private Properties pro;// properties集合

    @Override
    public String toString() {
        return "CollectionDemo{" +
                "arr=" + Arrays.toString(arr) +
                ", list=" + list +
                ", map=" + map +
                ", pro=" + pro +
                '}';
    }

    public Object[] getArr() {
        return arr;
    }

    public void setArr(Object[] arr) {
        this.arr = arr;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public Map getMap() {
        return map;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    public Properties getPro() {
        return pro;
    }

    public void setPro(Properties pro) {
        this.pro = pro;
    }

    public CollectionDemo() {
    }
}

spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean name="car" class="pojo.Car">
      <property name="brand" value="兰博基尼"></property>
      <property name="color" value="红色"></property>
   </bean>

   <!-- 复杂类型输入(集合)-->
   <bean name="coll" class="demo4.CollectionDemo">
      <!-- 1.数组类型注入-->
      <!-- 1.1 数组注入一个元素-->
      <!--<property name="arr" value="你好"></property>-->
      <!-- 1.2 数组中注入多个元素-->
      <property name="arr">
        <list>
           <value>10</value>
           <value>夏松</value>
           <value type="pojo.Car">#{car}</value>
        </list>
      </property>
      <!-- 2.list集合中注入-->
      <!-- 2.1 list注入一个元素-->
      <!--<property name="list"><value>联想</value></property>-->
      <!-- 2.2 list注入多个个元素-->
      <property name="list">
         <list>
            <value>猫</value>
            <value>狗</value>
            <value>猪</value>
            <value type="pojo.Car">#{car}</value>
         </list>
      </property>
      <!-- 3.map集合中注入-->
      <property name="map">
         <map>
            <entry key="1" value="111"/>
            <entry key="2" value-ref="car"/>
            <entry key-ref="car" value-ref="car"/>
         </map>
      </property>
      <!-- 4.properties集合中注入-->
      <property name="pro">
         <props>
            <prop key="星期一">morning</prop>
            <prop key="星期六">noon</prop>
            <prop key="放假了">afternoon</prop>
         </props>
      </property>
   </bean>
</beans>

测试类

/**
 * 注入复杂类型(集合)
 */
public class Demo4Test {
    public static void main(String[] args) {
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("vp/lu/demo4/spring-config.xml");
        CollectionDemo coll = (CollectionDemo) ac.getBean("coll");
        System.out.println(coll);

    }
}

6.分配置文件的使用

spring-config.xml
<?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">
       
    <import resource="demo2/spring-config.xml"></import>
    <import resource="demo3/spring-config.xml"></import>
    <import resource="demo4/spring-config.xml"></import>
</beans>

测试类

/**
 * 分配置文件
 */
public class Demo5 {
    public static void main(String[] args) {
        fun2();
    }

    /**
     * 由一个主配置文件管理其他配置文件,java只负责读取主配置文件
     * 建议使用:
     */
    private static void fun2() {
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("spring-config.xml");
        // demo3中配置文件
        User user04 = (User) ac.getBean("user04");
        user04.a();
        // demo4中配置文件
        CollectionDemo coll = (CollectionDemo) ac.getBean("coll");
        System.out.println(coll.toString());
    }

    /**
     * java主动读取多个配置文件:
     * 不建议使用:不方便,后期维护困难
     */
    private static void fun1() {
        // 1.同时读取多个配置文件
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("vp/lu/demo4/spring-config.xml",
                        "vp/lu/demo3/spring-config.xml");
        // demo3中配置文件
        User user04 = (User) ac.getBean("user04");
        user04.a();
        // demo4中配置文件
        CollectionDemo coll = (CollectionDemo) ac.getBean("coll");
        System.out.println(coll.toString());
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值