
spring是一个轻量级开源的JavaEE框架
spring可以解决企业应用开发的复杂性
spring有两个核心部分:IOC和AOP
IOC:控制反转,把创建对象过程交给spring进行管理。
AOP:面向切面,不修改源代码进行功能增强。
方便解耦,简化开发
AOP编程的支持
声明式事务的支持
方便程序的测试
方便集成各种优秀框架
降低Java EE API的使用难度
Java 源码是经典学习范例
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>springartifactId>
<version>2.5.6version>
dependency>
public class User {
public void sout(){
System.out.println ("你好,spring5");
}
}
<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="user" class="com.spring.User">bean>
beans>
public class UserTest {
@Test
public void testSout(){
//1,加载spring配置文件
ApplicationContext context=
new ClassPathXmlApplicationContext ("bean1.xml");
//2.获得配置创建的对象
User user = (User) context.getBean ("user", User.class);
System.out.println (user);
user.sout ();
}
}
- IOC就是控制反转,把对象创建和对象之间的调用过程交给spring进行管理
- 使用IOC的目的:为了耦合度降低
- 做入门案例就是IOC的实现
IOC底层原理主要用到了:xml解析、工厂模式、反射


IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
Spring提供IOC容器实现两个方式:(两个接口)
- BeanFactory :IOC容器基本实现,是spring内部使用的接口,不提供开发人员进行使用。
- 加载配置文件的时候不会创建对象,在获取(使用)才去创建对象
- ApplicationContext :BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人员进行使用。
- 加载配置文件的时候就会把配置文件对象进行创建
ApplicationContext 接口的主要实现类:

bean管理指的是两个操作:
- spring 创建对象
- spring 注入属性
- 基于XML
- 基于注解
在spring配置文件中,使用bean标签,标签里面添加对应的属性,就可以实现对象创建。
注意:创建对象时,默认也是执行无参构造方法完成对象的创建
bean标签的属性介绍:
- id 属性: 唯一标识
- class 属性:类的全路径(包类路径)
<bean id="user" class="com.spring.User">bean>
DI:依赖注入,就是注入属性
package com.spring;
public class Book {
private String bookname;
private int id;
//方式一:set注入
public void setBookname(String bookname) {
this.bookname = bookname;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Book{" + "bookName='" + bookname + '\'' + ", id=" + id + '}';
}
}
<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="book" class="com.spring.Book">
<property name="bookname" value="活着">property>
<property name="id" value="1">property>
bean>
beans>
@Test
public void BookTest(){
//1,加载spring配置文件
ApplicationContext context=
new ClassPathXmlApplicationContext ("bean1.xml");
//2.获得配置创建的对象
Book book = context.getBean ("book", Book.class);
System.out.println (book.toString ());
}
package com.spring;
public class Person {
private String pname;
private int age;
//有参构造器
public Person(String pname, int age) {
this.pname = pname;
this.age = age;
}
@Override
public String toString() {
return "Person{" + "pname='" + pname + '\'' + ", age=" + age + '}';
}
}
<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="person" class="com.spring.Person">
<constructor-arg index="0" value="霸王花">constructor-arg>
<constructor-arg index="1" value="18">constructor-arg>
bean>
beans>
@Test
public void personTest(){
//1,加载spring配置文件
ApplicationContext context=
new ClassPathXmlApplicationContext ("bean1.xml");
//2.获得配置创建的对象
Person person = context.getBean ("person", Person.class);
System.out.println (person.toString ());
}
使用p名称空间注入,可以简化基于XML配置方式
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="book" class="com.spring.Book" p:bookname="海绵宝宝" p:id="9">
bean>
beans>
进行属性注入,在bean标签里面进行操作
测试同①
- 字面值
- 注入属性——外部bean
- 注入属性——内部bean和级联赋值
字面量:
<property name="bookname">
<null/>
property>
属性值包含特殊符号
特殊符号:
1. 把<>进行转义
2. 把特殊符号内容写进CDATA
<property name="bookname" >
<value>
>]]>
value>
property>
注入属性——外部bean
package dao;
public class User implements UserDao {
@Override
public void show() {
System.out.println ("我是user");
}
}
package dao;
public interface UserDao {
public void show();
}
package service;
import dao.UserDao;
public class UserService {
private UserDao userdao;
public void setUserdao(UserDao userdao) {
this.userdao = userdao;
}
public void test(){
System.out.println ("我是userservice");
userdao.show ();
}
}
<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="userService" class="service.UserService">
<property name="userdao" ref="userDao">property>
bean>
<bean name="userDao" class="dao.User">bean>
beans>
@Test
public void testSout(){
//1,加载spring配置文件
ApplicationContext context=
new ClassPathXmlApplicationContext ("bean1.xml");
//2.获得配置创建的对象
UserService userService = context.getBean ("userService",UserService.class);
userService.test ();
}
package bean;
public class Emp {
private String name;
private int age;
private Dept dept;
public void setDept(Dept dept) {
this.dept = dept;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Emp{" + "name='" + name + '\'' + ", age=" + age + ", dept=" + dept + '}';
}
}
package bean;
public class Dept {
private int did;
public void setDid(int did) {
this.did = did;
}
@Override
public String toString() {
return "Dept{" + "did=" + did + '}';
}
}
<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="emp" class="bean.Emp">
<property name="name" value="霸王花">property>
<property name="age" value="18">property>
<property name="dept">
<bean id="dept" class="bean.Dept">
<property name="did" value="9">property>
bean>
property>
bean>
@Test
public void test(){
//1,加载spring配置文件
ApplicationContext context=
new ClassPathXmlApplicationContext ("bean2.xml");
//2.获得配置创建的对象
Emp emp = context.getBean ("emp", Emp.class);
System.out.println (emp.toString ());
}
方法一:
<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="emp" class="bean.Emp">
<property name="name" value="霸王花">property>
<property name="age" value="18">property>
<property name="dept" ref="dept">property>
bean>
<bean id="dept" class="bean.Dept">
<property name="did" value="0">property>
bean>
beans>
方法二:
需要提前在emp类中生成dept的get方法
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLoc