zoukankan      html  css  js  c++  java
  • 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>
      
  • 相关阅读:
    没有服务商如何购买ERP的序列号?
    智能ERP主副机设置
    银盒子·序列号购买(2018-12-05)
    简易付微信收款提示支付失败
    简易付无法登录的解决方案
    Orchard详解--第八篇 拓展模块及引用的预处理
    Orchard详解--第七篇 拓展模块(译)
    Orchard详解--第六篇 CacheManager 2
    Orchard详解--第五篇 CacheManager
    Orchard详解--第四篇 缓存介绍
  • 原文地址:https://www.cnblogs.com/wuliqqq/p/11477785.html
Copyright © 2011-2022 走看看