Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

Spring 是一个开源框架.

Spring 为简化企业级应用开发而生(对比EJB2.0来说). 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。
Spring 是一个 IOC(DI) 和 AOP 容器框架。

 

具体描述 Spring:
轻量级:Spring 是非侵入性的 – 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API
控制反转(依赖注入) (IOC—-inverse of control 、DI — dependency injection)
面向切面编程(AOP — aspect oriented programming)
容器: Spring 是一个容器, 因为它包含并且管理应用对象的生命周期
框架: Spring 实现了使用简单的组件配置组合成一个复杂的应用. 在 Spring 中可以使用 XML 和 Java 注解组合这些对象
一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)

所需jar包Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

 

Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

<?
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="dog" class="com.zhiqi.entity.Dog"></
bean
>
     
</
beans
>

  装配一个Bean

package 
com.zhiqi.entity;
 
public 
class 
Dog {
 
    
private 
String name;
 
    
public 
String getName() {
        
return 
name;
    
}
    
public 
void 
setName(String name) {
        
this
.name = name;
    
}
 
}

  

package 
com.zhiqi.test;
 
import 
org.springframework.context.ApplicationContext;
import 
org.springframework.context.support.ClassPathXmlApplicationContext;
 
import 
com.zhiqi.entity.Dog;
 
public 
class 
T {
 
    
public 
static 
void 
main(String[] args) {
        
ApplicationContext ac=
new 
ClassPathXmlApplicationContext(
"beans.xml"
);
        
Dog dog=(Dog)ac.getBean(
"dog"
);
        
System.out.println(dog.getName());
    
}
}

  Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

此时装配了Dog这个类,但是为null

需要进行依赖注入(属性注入、构造方法注入,工厂注入)

1、属性注入:

装配一个员工类

package 
com.zhiqi.entity;
 
public 
class 
Employee {
 
    
private 
int 
id;
    
private 
String name;
    
private 
String sex;
    
public 
int 
getId() {
        
return 
id;
    
}
    
public 
void 
setId(
int 
id) {
        
this
.id = id;
    
}
    
public 
String getName() {
        
return 
name;
    
}
    
public 
void 
setName(String name) {
        
this
.name = name;
    
}
    
public 
String getSex() {
        
return 
sex;
    
}
    
public 
void 
setSex(String sex) {
        
this
.sex = sex;
    
}
}

  

package 
com.zhiqi.test;
 
import 
org.springframework.context.ApplicationContext;
import 
org.springframework.context.support.ClassPathXmlApplicationContext;
 
import 
com.zhiqi.entity.Dog;
import 
com.zhiqi.entity.Employee;
 
public 
class 
T {
 
    
public 
static 
void 
main(String[] args) {
        
ApplicationContext ac=
new 
ClassPathXmlApplicationContext(
"beans.xml"
);
        
Employee employee=(Employee)ac.getBean(
"employee"
);
        
System.out.println(employee.getName());
    
}
}

  Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

属性注入如下:<property name=”” value=””></property>

<
bean 
name="employee" class="com.zhiqi.entity.Employee">
        
<
property 
name="id" value="10050"></
property
>
        
<
property 
name="name" value="小鲜肉"></
property
>
        
<
property 
name="sex" value="男"></
property
>
    
</
bean
>

构造方法注入一(通过类型):<constructor-arg type=”” value=””></constructor-arg>

<
bean 
name="employee" class="com.zhiqi.entity.Employee">
        
<
constructor-arg 
type="int" value="10010"></
constructor-arg
>
        
<
constructor-arg 
type="String" value="小萝莉"></
constructor-arg
>
        
<
constructor-arg 
type="String" value="女"></
constructor-arg
>
    
</
bean
>

  此时需要写构造函数否则会报错:

Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

public 
class 
Employee {
 
    
private 
int 
id;
    
private 
String name;
    
private 
String sex;
     
    
public 
Employee() {
        
super
();
        
// TODO Auto-generated constructor stub
    
}
    
public 
Employee(
int 
id, String name, String sex) {
        
super
();
        
this
.id = id;
        
this
.name = name;
        
this
.sex = sex;
    
}
}

  

构造方法注入二(通过索引):<constructor-arg index=”” value=””></constructor-arg>   索引从0开始

<
bean 
name="employee" class="com.zhiqi.entity.Employee">
        
<
constructor-arg 
index="0" value="10010"></
constructor-arg
>
        
<
constructor-arg 
index="1" value="小萝莉"></
constructor-arg
>
        
<
constructor-arg 
index="2" value="女"></
constructor-arg
>
    
</
bean
>

 可以混合使用 类型+索引

<
bean 
name="employee" class="com.zhiqi.entity.Employee">
        
<
constructor-arg 
type="int" index="0" value="10010"></
constructor-arg
>
        
<
constructor-arg 
type="String" index="1" value="小萝莉"></
constructor-arg
>
        
<
constructor-arg 
type="String" index="2" value="女"></
constructor-arg
>
    
</
bean
>

通过工厂注入:<bean name=”employee” factory-bean=”” factory-method=””></bean>

package 
com.zhiqi.factory;
 
import 
com.zhiqi.entity.Employee;
 
public 
class 
EmployeeFactory {
 
    
public 
Employee createEmployee(){
        
Employee employee=
new 
Employee();
        
employee.setId(
10080
);
        
employee.setName(
"小霸王"
);
        
employee.setSex(
"男"
);
        
return 
employee;
    
}
}

  

<?
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="dog" class="com.zhiqi.entity.Dog"></
bean
>
     
    
<
bean 
name="employeeFactory" class="com.zhiqi.factory.EmployeeFactory"></
bean
>
    
<
bean 
name="employee" factory-bean="employeeFactory" factory-method="createEmployee"></
bean
>
     
</
beans
>

  Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

通过静态工厂注入:

Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

注入参数:

1、基本类型值

2、注入bean

3、内部bean

4、null值

5、级联属性

6、集合注入(List、Set、Map)

员工有一辆车

<
bean 
id="employee" class="com.zhiqi.entity.Employee">
        
<
property 
name="id" value="10060"></
property
>
        
<
property 
name="name" value="脑残粉"></
property
>
        
<
property 
name="sex" value="女"></
property
>
        
<
property 
name="car" ref="car"></
property
>
    
</
bean
>
    
<
bean 
id="car" class="com.zhiqi.entity.Car">
        
<
property 
name="name" value="别克"></
property
>
    
</
bean
>

  Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

一辆车只属于某员工,内部bean

<
bean 
id="employee" class="com.zhiqi.entity.Employee">
        
<
property 
name="id" value="10060"></
property
>
        
<
property 
name="name" value="脑残粉"></
property
>
        
<
property 
name="sex" value="女"></
property
>
        
<
property 
name="car">
            
<
bean 
class="com.zhiqi.entity.Car">
                
<
property 
name="name" value="雪佛兰"></
property
>
            
</
bean
>
        
</
property
>
    
</
bean
>

  Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

 

有一个员工没有车

<
bean 
id="employee" class="com.zhiqi.entity.Employee">
        
<
property 
name="id" value="10060"></
property
>
        
<
property 
name="name" value="脑残粉"></
property
>
        
<
property 
name="sex" value="女"></
property
>
        
<
property 
name="car">
            
<
null
></
null
>
        
</
property
>
    
</
bean
>

  Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

 级联

<
bean 
id="employee" class="com.zhiqi.entity.Employee">
        
<
property 
name="id" value="10060"></
property
>
        
<
property 
name="name" value="脑残粉"></
property
>
        
<
property 
name="sex" value="女"></
property
>
        
<
property 
name="car.name" value="好车"></
property
>
    
</
bean
>

  此时在Car中new一个

Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

一个员工有多个girlFriend

private 
int 
id;
    
private 
String name;
    
private 
String sex;
    
private 
Car car;
    
private 
List<String> girlFriend=
new 
ArrayList<String>();

  

<?
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 
id="employee" class="com.zhiqi.entity.Employee">
        
<
property 
name="id" value="10060"></
property
>
        
<
property 
name="name" value="脑残粉"></
property
>
        
<
property 
name="sex" value="女"></
property
>
        
<
property 
name="car" value="宾利"></
property
>
        
<
property 
name="girlFriend">
            
<
list
>
                
<
value
>琪琪</
value
>
                
<
value
>丽丽</
value
>
                
<
value
>小莫</
value
>
            
</
list
>
        
</
property
>
    
</
bean
>
 
</
beans
>

  Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

一个员工有多套房子

private Set<String> house=new HashSet<String>();

<?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 id=
"employee" 
class
=
"com.zhiqi.entity.Employee"
>
        
<property name=
"id" 
value=
"10060"
></property>
        
<property name=
"name" 
value=
"脑残粉"
></property>
        
<property name=
"sex" 
value=
"女"
></property>
        
<property name=
"car" 
value=
"宾利"
></property>
        
<property name=
"girlFriend"
>
            
<list>
                
<value>琪琪</value>
                
<value>丽丽</value>
                
<value>小莫</value>
            
</list>
        
</property>
        
<property name=
"house"
>
            
<set>
                
<value>房子
1
</value>
                
<value>别墅
2
</value>
            
</set>
        
</property>
    
</bean>
 
</beans>

  一个员工的工作

<?
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 
id="employee" class="com.zhiqi.entity.Employee">
        
<
property 
name="id" value="10060"></
property
>
        
<
property 
name="name" value="脑残粉"></
property
>
        
<
property 
name="sex" value="女"></
property
>
        
<
property 
name="car" value="宾利"></
property
>
        
<
property 
name="girlFriend">
            
<
list
>
                
<
value
>琪琪</
value
>
                
<
value
>丽丽</
value
>
                
<
value
>小莫</
value
>
            
</
list
>
        
</
property
>
        
<
property 
name="house">
            
<
set
>
                
<
value
>房子1</
value
>
                
<
value
>别墅2</
value
>
            
</
set
>
        
</
property
>
        
<
property 
name="works">
            
<
map
>
                
<
entry
>
                    
<
key
><
value
>上午</
value
></
key
>
                    
<
value
>撸代码</
value
>
                
</
entry
>
                
<
entry
>
                    
<
key
><
value
>下午</
value
></
key
>
                    
<
value
>找BUG</
value
>
                
</
entry
>
            
</
map
>
        
</
property
>
    
</
bean
>
 
</
beans
>

  

package 
com.zhiqi.test;
 
import 
java.util.Iterator;
 
import 
org.springframework.context.ApplicationContext;
import 
org.springframework.context.support.ClassPathXmlApplicationContext;
 
import 
com.zhiqi.entity.Employee;
 
public 
class 
T {
 
    
public 
static 
void 
main(String[] args) {
        
ApplicationContext ac=
new 
ClassPathXmlApplicationContext(
"beans.xml"
);
        
Employee employee=(Employee)ac.getBean(
"employee"
);
        
for
(String str:employee.getHouse()){
            
System.out.println(str);
        
}
        
//entrySet()将map转为set,然后迭代器遍历
        
Iterator it=employee.getWorks().entrySet().iterator();
        
while
(it.hasNext()){
            
System.out.println(it.next());
        
}
    
}
}

  •   Spring属性注入、构造方法注入、工厂注入以及注入参数详解编程语言

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16993.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论