Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring核心有两个方面IOC(依赖注入)和AOP(面向对象切面编程)
Spring贯穿在整个项目之中,每当我们需要new 一个对象的时候,其实很耗资源的,
通过spring可以被动的让我们获取想要的对象而不用每次都去new
整体来说,是个容器,存放着各种bean,在容器创建时,创建bean,并管理bean。ssh,分别指的是struts、spring、hibernate。整合起来,是让spring来管理struts和hibernate,并且,能让hibernate能用上spring的事物。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
Person , Card
//Card
package com.zking.pojo;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.jws.Oneway;
/**
* @ClassName: Card
* @Description: (描述这个类的作用)
* @author LJY
* @date 2018年9月17日 下午2:59:22
*
*/
public class Card {
private String cid;
private String cname;
private Set<String> ls;
private List<String> lp;
private Map<Object, Object> lm;
private Person person;
public Card() {
super();
}
public Map<Object, Object> getLm() {
return lm;
}
public void setLm(Map<Object, Object> lm) {
this.lm = lm;
}
public Set<String> getLs() {
return ls;
}
public void setLs(Set<String> ls) {
this.ls = ls;
}
public List<String> getLp() {
return lp;
}
public void setLp(List<String> lp) {
this.lp = lp;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public Card(String cid, String cname) {
super();
this.cid = cid;
this.cname = cname;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@Override
public String toString() {
return "Card [cid=" + cid + ", cname=" + cname + "]";
}
}
//Person
package com.zking.pojo;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Person {
private String pid;
private String pname;
private String pwd;
private Map<Object, Object> lm;
private Set<String> sc;
private Set<Card> lsc;
private List<String> lp;
private Card card;
public Set<Card> getLsc() {
return lsc;
}
public void setLsc(Set<Card> lsc) {
this.lsc = lsc;
}
public Map<Object, Object> getLm() {
return lm;
}
public void setLm(Map<Object, Object> lm) {
this.lm = lm;
}
public Set<String> getSc() {
return sc;
}
public void setSc(Set<String> sc) {
this.sc = sc;
}
public List<String> getLp() {
return lp;
}
public void setLp(List<String> lp) {
this.lp = lp;
}
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
public Person() {
super();
}
public Person(String pid, String pname, String pwd) {
super();
this.pid = pid;
this.pname = pname;
this.pwd = pwd;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", pwd=" + pwd + "]";
}
//init-method
public void infName() {
System.out.println("初始化的值");
}
}
applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<!-- 产生一个spring bean 因为我的所有的产生的bean的对象全部都是写在xml配置文件中的 那么就意味着我需要加载这一个配置文件applicationContext.xml
加载xml配置文件信息,那么就意味着解析xml,解析xml就意味使用dom4j class属性值得时候,根据class的值 进行反射 Class.fromName(class)
ioc无非就是使用的dome4j+反射 hibernate(缓存机制) struts2(拦截器->解析struts.xml文件并且反射) -->
<!-- id(不可以随便定义 idx相当于 Person person=new Person) class name(name可以随便定义) -->
<!-- Person -->
<!-- scope="prototype" 单列,本身默认的就是单列 -->
<bean id="person" class="com.zking.pojo.Person" name="$!.m"
init-method="infName">
<property name="pid" value="12121"></property>
<property name="pname" value="zs"></property>
<property name="pwd" value="pwd"></property>
<!-- List集合 -->
<property name="lp">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
<!-- Set集合 -->
<property name="sc">
<set>
<value>1</value>
<value>2</value>
<value>4</value>
</set>
</property>
<!-- Map集合 -->
<property name="lm">
<map>
<entry key="pid" value="sdsd"></entry>
<entry key="pname" value="sdsdd"></entry>
</map>
</property>
<property name="lsc">
<set>
<ref bean="card" />
</set>
</property>
</bean>
<!-- Card -->
<bean id="card" name="card" class="com.zking.pojo.Card">
<!-- property -->
<property name="cid" value="2323"></property>
<property name="cname" value="ls"></property>
<!-- constructor-arg -->
<constructor-arg index="0" value="121212121"></constructor-arg>
<constructor-arg index="1" value="密码"></constructor-arg>
</bean>
</beans>
TempTest.java
package com.zking.test;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import com.zking.pojo.Card;
import com.zking.pojo.Person;
public class TempTest {
@Test
public void Temp() {
// 懒加载(延时加载)
// BeanFactory beanFactory = new XmlBeanFactory(new
// ClassPathResource("applicationContext.xml"));
// Person person = (Person) beanFactory.getBean("person");
// Card card = (Card) beanFactory.getBean("card");
// System.out.println(person);
// System.out.println(card);
// 及时加载
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = (Person) applicationContext.getBean("person");
System.out.println(person);
// List集合
System.out.println(person.getLp());
// Map集合
System.out.println(person.getLm());
// Set集合
System.out.println(person.getSc());
// 对象
System.out.println(person.getCard());
// Card card = (Card) applicationContext.getBean("card");
// System.out.println(card);
for (Card c : person.getLsc()) {
System.out.println(c.getCname() + "sdsd" + c.getCid());
}
}
}