spring之再学习(1)
程序员文章站
2022-07-12 09:15:18
...
Spring 4.x 官方博客
Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发
布。
该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最
初由Rod Johnson和Juergen Hoeller等开发。
Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量
的属性文件和帮助类。
Sping体系
2 Spring 快速入门
- 2.1 编写流程
maven依赖或者下载jar包
<!--spring的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
- 2.2 SayHello 实现
★Spring核心开发包
- spring-core-3.2.2.RELEASE.jar
- 包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心。
- spring-beans-3.2.2.RELEASE.jar
- 所有应用都要用到的,它包含访问配置文件、创建和管理bean
- 以及进行Inversion of Control(IoC) / Dependency Injection(DI)操作相关的所有类
2.2.2 编写业务类
/**
* Created by wanggs on 2017/7/7.
*/
public class SayHello {
public void sayHello() {
System.out.println("Spring4X......");
}
}
2.2.3 传统方式创建实例
/**
* Created by wanggs on 2017/7/7.
*/
public class SayHelloTest {
public static void main(String[] args) {
//传统方式创建实例(对象)
SayHello sayHello = new SayHello();
sayHello.sayHello();
}
}
2.2.4 Spring IoC控制反转创建实例
- 编写配置文件( 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">
<!--id: bean 在容器的名称不能重复 -->
<!--class: 放入spring容器的包的完全限定名-->
<bean id="sayHello" class="com.wanggs.pojo.SayHello"> </bean>
</beans>
- 从spring容器获得对象实例
package com.wanggs.pojo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by wanggs on 2017/7/7.
*/
public class SayHellTest {
public static void main(String[] args) {
//读取配置文件,使用spring 控制反转,交予spring创建对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//"sayHello"-->>即配置文件 (id: bean 在容器的名称)
SayHello sayHello = (SayHello) applicationContext.getBean("sayHello");
sayHello.sayHello();
//结果: Spring4X......
}
}
IoC解释
IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建HelloService对象的控制权,交由Spring框架管理,简单说,就是创建HelloService对象控制权被反转到了Spring框架
- 2.2.5 传统方式设置内容 注意:加了一个name属性
/**
* Created by wanggs on 2017/7/7.
*/
public class SayHelloTest {
public static void main(String[] args) {
//传统方式创建实例(对象)
SayHello sayHello = new SayHello();
sayHello.setName("tom");//手动设置值
sayHello.sayHello();
}
}
- 2.2.6 Spring DI 设置字段内容
编写配置文件
<?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">
<!--id: bean 在容器的名称不能重复 -->
<!--class: 放入spring容器的包的完全限定名-->
<bean id="sayHello" class="com.wanggs.pojo.SayHello">
<!--spring设置-->
<property name="name" value="tom"/>
</bean>
</beans>
从spring直接获得注入的内容
package com.wanggs.pojo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by wanggs on 2017/7/7.
*/
public class SayHellTest {
public static void main(String[] args) {
//读取配置文件,使用spring 控制反转,交予spring创建对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//"sayHello"-->>即配置文件 (id: bean 在容器的名称)
SayHello sayHello = (SayHello) applicationContext.getBean("sayHello");
sayHello.setName("tom");
sayHello.sayHello();
//结果: Spring4X......
}
}
new一个对象即IOC() 对象的属性设置即DI(property)
再来一个例子
3.1 目标类
- 创建BookService接口和实现类
- 创建BookDao接口和实现类
- 将dao和service配置 xml文件
- 使用api测试
3.1.1 dao
/**
* Created by wanggs on 2017/7/7.
*/
public interface BookDao {
public abstract void addBook();
}
//Dao的实现类
/**
* Created by wanggs on 2017/7/7.
*/
public class BookDaoImpl implements BookDao {
public void addBook() {
System.out.println("DI add Book");
}
}
3.1.2 service
/**
* Created by wanggs on 2017/7/7.
*/
public interface BookService {
public abstract void saveBook();
}
// BookService的实现类
/**
* Created by wanggs on 2017/7/7.
*/
public class BookServiceImpl implements BookService{
//之前的方式 接口 = 实现类;(多态)
//spring: 接口+set方法
private BookDao bookDao;
public void setBookDao(BookDao bookDao ){
this.bookDao = bookDao;
}
public void saveBook() {
this.bookDao.addBook();
}
}
3.2 配置文件
<?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">
<!--id: bean 在容器的名称不能重复 -->
<!--class: 放入spring容器的包的完全限定名-->
<bean id="sayHello" class="com.wanggs.pojo.SayHello">
<property name="name" value="tom"/>
</bean>
<!--property 用于属性注入
name: 属性的名字==>>private BookDao bookDao;
ref: 引用另一个bean的id
-->
<bean id="bookService" class="com.wanggs.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="com.wanggs.dao.impl.BookDaoImpl"/>
</beans>
3.3 测试
/**
* Created by wanggs on 2017/7/7.
*/
public class BookServiceTest {
public static void main(String[] args) {
// 读取配置文件,使用spring控制反转交给spring创建对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// "bookService"-->>即配置文件 (id: bean 在容器的名称)
BookService bookService = (BookService) applicationContext.getBean("bookService");
bookService.saveBook();
}
//结果: DI add Book
}