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包

<?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());
}
}
|

此时装配了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());
}
}
|

属性注入如下:<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>
|
此时需要写构造函数否则会报错:

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

通过静态工厂注入:


注入参数:
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>
|

一辆车只属于某员工,内部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>
|

有一个员工没有车
<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>
|

级联
<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一个

一个员工有多个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>
|

一个员工有多套房子
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());
}
}
}
|
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/16993.html