Spring依赖注入的方式、类型、Bean的作用域、自动注入、在Spring配置文件中引入属性文件...

1.Spring依赖注入的方式

  1. 通过set方法完成依赖注入
  2. 通过构造方法完成依赖注入

2.依赖注入的类型

  1. 基本数据类型和字符串 使用value属性
  2. 如果是指向另一个对象的引入 使用ref属性

User类

package com.alibaba.wlq.bean;

public class User {
    private String name;
    private Integer age;
    private String phone;
    private Student student;
    public Student getStudent() {
        return student;
    }
    public void setStudent(Student student) {
        this.student = student;
    }
    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 getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public User(String name, String phone) {
        super();
        this.name = name;
        this.phone = phone;
        System.out.println("调用两个参的构造函数");
    }
    public User(String name, Integer age, String phone) {
        super();
        this.name = name;
        this.age = age;
        this.phone = phone;
    }
    public User() {
        super();
        System.out.println("调用无参的构造函数");
    }
    
    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", phone=" + phone + ", student=" + student + "]";
    }
    public void show() {
        System.out.println("调用了show方法");
    }
}

Student类

package com.alibaba.wlq.bean;

public class Student {
    private String address;
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "Student [address=" + address + "]";
    }
}

配置文件

    <bean id="stu" class="com.alibaba.wlq.bean.Student">
        <property name="address" value="南京"></property>
    </bean>
    
    <bean id="user" class="com.alibaba.wlq.bean.User">
        <property name="name" value="刘亦菲"></property>
        <property name="age" value="18"></property>
        <property name="phone" value="10086"></property>
        <property name="student" ref="stu"></property>
    </bean>

测试类

package com.alibaba.wlq.test;
import org.omg.CORBA.portable.ApplicationException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.alibaba.wlq.bean.User;
public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ApplicationContext app = new ClassPathXmlApplicationContext("app.xml");
        User u = (User) app.getBean("user");
        u.show();
        System.out.println(u);
    }
}
  1. 如果类对象注入的属性类型为List类型

在User类中增加如下代码

private List<String> list;
    public List<String> getList() {
        return list;
    }
    public void setList(List<String> list) {
        this.list = list;
    }

配置文件中User类的配置改变

<bean id="user" class="com.alibaba.wlq.bean.User">
        <property name="name" value="刘亦菲"></property>
        <property name="age" value="18"></property>
        <property name="phone" value="10086"></property>
        <property name="student" ref="stu"></property>
        <property name="list">
            <list>
                <value>1</value>
                <value>2</value>
                <value>3</value>
                <value>4</value>
            </list>
        </property>
    </bean>

测试类中间部分

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ApplicationContext app = new ClassPathXmlApplicationContext("app.xml");
        User u = (User) app.getBean("user");
        List<String> list = u.getList();
        for (String string : list) {
            System.out.println(string);
        }
        u.show();
        System.out.println(u);
    }

打印结果

调用无参的构造函数
1
2
3
4
调用了show方法
User [name=刘亦菲, age=18, phone=10086, student=Student [address=南京]]
  1. 如果类对象注入的属性类型为Map类型

在User类中添加如下代码

    private Map<String, String> map;
    public Map<String, String> getMap() {
        return map;
    }
    public void setMap(Map<String, String> map) {
        this.map = map;
    }

配置文件

    <bean id="user" class="com.alibaba.wlq.bean.User">
        <property name="name" value="刘亦菲"></property>
        <property name="age" value="18"></property>
        <property name="phone" value="10086"></property>
        <property name="student" ref="stu"></property>
        <property name="list">
            <list>
                <value>1</value>
                <value>2</value>
                <value>3</value>
                <value>4</value>
            </list>
        </property>
        <property name="map">
            <map>
                <entry key="lyf" value="刘亦菲"></entry>
                <entry key="jsy" value="江疏影"></entry>
                <entry key="lye" value="林允儿"></entry>
            </map>  
        </property>
    </bean>

测试类

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ApplicationContext app = new ClassPathXmlApplicationContext("app.xml");
        User u = (User) app.getBean("user");
        List<String> list = u.getList();
        for (String string : list) {
            System.out.println(string);
        }
        Map<String, String> map = u.getMap();
        for (String k : map.keySet()) {
            System.out.println(k+"===="+map.get(k));
        }
        u.show();
        System.out.println(u);
    }

打印结果

调用无参的构造函数
1
2
3
4
lyf====刘亦菲
jsy====江疏影
lye====林允儿
调用了show方法
User [name=刘亦菲, age=18, phone=10086, student=Student [address=南京]]

3.Bean的作用域

Bean的作用域默认为单例模式

Strust2:该框架要求非单例

bean标签中有scope属性,不写默认为单例,scope属性表示Bean的作用域,非单例:scope="prototype"

4.自动注入

Service类

package com.alibaba.wlq.service;

import com.alibaba.wlq.bean.Product;

public class ProductService {
    private Product product;
    public void fun(){
        product.find();
    }
    public Product getProduct() {
        return product;
    }
    public void setProduct(Product product) {
        this.product = product;
    }
}

Product类

package com.alibaba.wlq.bean;

public class Product {
    private String name;
    private int num;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public void find() {
        System.out.println("======find=====");
    }
    @Override
    public String toString() {
        return "Product [name=" + name + ", num=" + num + "]";
    }
}

配置文件

<?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"
    default-autowire="byName">
    
    <bean id="pService" class="com.alibaba.wlq.service.ProductService" autowire="default">
    </bean>
    <bean id="product" class="com.alibaba.wlq.bean.Product">
        <property name="name" value="5700xt"></property>
        <property name="num" value="2"></property>
    </bean>
    
</beans>

测试代码

package com.alibaba.wlq.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.alibaba.wlq.bean.Product;
import com.alibaba.wlq.service.ProductService;

public class Test2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ApplicationContext app = new ClassPathXmlApplicationContext("app2.xml");
        ProductService pService = (ProductService) app.getBean("pService");
        pService.fun();
        Product product = (Product) app.getBean("product");
        System.out.println(product);
    }

}

打印结果

======find=====
Product [name=5700xt, num=2]

5.在Spring配置文件中引入属性文件

  1. 在resources源文件夹下创建properties文件

    p.name=3700x
    p.num=99
  2. 在配置文件中引用properties文件

    <context:property-placeholder location="classpath:my.properties"/>   
     <!-- 引入属性文件,如果要引入多个那就在后面加, -->
     <bean id="pService" class="com.alibaba.wlq.service.ProductService" autowire="default">
     </bean>
     <bean id="product" class="com.alibaba.wlq.bean.Product">
            <!--获取属性文件中的属性-->
         <property name="name" value="${p.name}"></property>
         <prope1rty name="num" value="${p.num}"></property>
     </bean>

转载于:https://www.cnblogs.com/wuliqqq/p/11477785.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值