随着时代发展,软件规模与功能都呈几何式增长,开发难度也在不断递增,该如何解决?
Spring可以简化开发,降低企业级开发的复杂性,使开发变得更简单快捷随着项目规模与功能的增长,遇到的问题就会增多,为了解决问题会引入更多的框架,这些框架如何协调工作?Spring可以框架整合,高效整合其他技术,提高企业级应用开发与运行效率,综上所述,Spring是一款非常优秀而且功能强大的框架。
目录
使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到
外部,此思想称为控制反转。业务层要用数据层的类对象,以前是自己 new 的,现在自己不new了,交给 别人[外部] 来创建对象,别人[外部] 就反转控制了数据层对象的创建权,这种思想就是控制反转。
Spring技术对IOC思想进行了实现,Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部",IOC思想中的 别人[外部] 指的就是Spring的IOC容器。
IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象,被创建或被管理的对象在IOC容器中统称为Bean,IOC容器中放的就是一个个的Bean对象。
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入,业务层要用数据层的类对象,以前是自己 new 的现在自己不new了,靠 别人[外部其实指的就是IOC容器] 来给注入进来
这种思想就是依赖注入。需要程序员根据业务需求提前建立好关系,如业务层需要依赖数据层,service就要和dao建立依赖关系,介绍完Spring的IOC和DI的概念后,我们会发现这两个概念的最终目标就是:充分解耦,具体实现靠:使用IOC容器管理bean(IOC),在IOC容器内将有依赖关系的bean进行关系绑定(DI),最终结果为:使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系.
1)创建java的maven项目,并在pom.xml中导入spring依赖jar包,如下:
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
-
- <groupId>org.examplegroupId>
- <artifactId>java02artifactId>
- <version>1.0-SNAPSHOTversion>
-
- <dependencies>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>5.2.10.RELEASEversion>
- dependency>
- dependencies>
-
-
- project>
2)创建数据访问层(dao)和业务层(service)的接口和接口实现类,如下:
- public interface BookDao {
- public void save() ;
- }
- import com.dao.BookDao;
-
- public class BookDaoImpl implements BookDao {
- public void save() {
- System.out.println("book dao save ...");
- }
- }
- public interface BookService {
- public void save() ;
- }
- import com.dao.BookDao;
- import com.dao.impl.BookDaoImpl;
- import com.service.BookService;
-
- public class BookServiceImpl implements BookService {
- BookDao bookDao = new BookDaoImpl() ;
- public void save() {
- bookDao.save();
- System.out.println("book service save...");
- }
- }
3)添加spring的配置文件applicationContext.xml,在配置文件中配置bean对象,这样IOC容器就可以管理bean对象,通过bean对象实现控制反转。
- "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="bookDao" class="com.dao.impl.BookDaoImpl"/>
- <bean id="bookService" class="com.service.impl.BookServiceImpl"/>
- beans>
4)编写测试类实现获取IOC容器,并通过bean对象调用相应的方法。
- import com.dao.BookDao;
- import com.service.BookService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- //获取bean对象,并执行相应的方法
- BookDao bookDao = (BookDao) applicationContext.getBean("bookDao");
- bookDao.save();
- System.out.println("-------------");
- BookService bookService = (BookService) applicationContext.getBean("bookService");
- bookService.save();
- }
- }
1)将上述业务层的new方法删除,并提供对应的setter方法。
- import com.dao.BookDao;
- import com.service.BookService;
-
- public class BookServiceImpl implements BookService {
- BookDao bookDao ;
- public void save() {
- bookDao.save();
- System.out.println("book service save...");
- }
-
- public void setBookDao(BookDao bookDao) {
- this.bookDao = bookDao;
- }
- }
2)在配置文件中添加依赖注入的配置。配置文件中两个bookDao的含义不同,name="bookDao"中 bookDao 的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前
面加set找对应的 setBookDao() 方法进行对象注入。ref="bookDao"中 bookDao 的作用是让Spring能在IOC容器中找到id为 bookDao 的Bean对象给bookService 进行注入。
- "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="bookDao" class="com.dao.impl.BookDaoImpl"/>
- <bean id="bookService" class="com.service.impl.BookServiceImpl">
-
- <property name="bookDao" ref="bookDao"/>
- bean>
- beans>
使用bean的 scope 属性可以控制bean的创建是否为单例:singleton 默认为单例,prototype 为非单例。
1)为什么bean默认为单例?
bean为单例的意思是在Spring的IOC容器中只会有该类的一个对象,bean对象只有一个就避免了对象的频繁创建与销毁,达到了bean对象的复用,性能高。
2)bean在容器中是单例的,会不会产生线程安全问题?
如果对象是有状态对象,即该对象有成员变量可以用来存储数据的,因为所有请求线程共用一个bean对象,所以会存在线程安全问题。如果对象是无状态对象,即该对象没有成员变量没有进行数据存储的,因方法中的局部变量在方法调用完成后会被销毁,所以不会存在线程安全问题。
关于bean的基础配置:id表示bean的唯一表示,name表示bean的别名,class表示bean的类全名,scope表示类的作用范围,包括singleton和prototype。
1)构造方法实例化
直接在接口的实现类中定义一个无参构造方法,即可实现bean的实例化。
- import com.dao.BookDao;
-
- public class BookDaoImpl implements BookDao {
- public BookDaoImpl(){
- System.out.println("构造方法实例化");
- }
- public void save() {
- System.out.println("book dao save ...");
- }
- }
2)静态工厂实例化
第一步,创建一个接口和实现类,如下:
- public interface OrderDao {
- public void save() ;
- }
- import com.dao.OrderDao;
-
- public class OrderDaoImpl implements OrderDao {
- public void save() {
- System.out.println("oderDao save ...");
- }
- }
第二步,创建一个工厂类OrderDaoFactory并提供一个静态方法
- import com.dao.OrderDao;
- import com.dao.impl.OrderDaoImpl;
-
- public class OrderDaoFactory {
- public static OrderDao getOrderDao(){
- System.out.println("静态工厂实例化");
- return new OrderDaoImpl() ;
- }
- }
-
第三步,在spring的配置文件application.properties中添加以下内容:
- "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="OrderDao" class="OrderDaoFactory" factory-method="getOrderDao">bean>
- beans>
第四步,编写运行类,使用从IOC容器中获取bean的方法进行运行测试
- import com.dao.OrderDao;
- import com.service.BookService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- // //获取bean对象,并执行相应的方法
- // BookDao bookDao = (BookDao) applicationContext.getBean("bookDao");
- // bookDao.save();
- // System.out.println("-------------");
- // BookService bookService = (BookService) applicationContext.getBean("bookService");
- // bookService.save();
- OrderDao orderDao = (OrderDao) applicationContext.getBean("OrderDao");
- orderDao.save();
- }
- }
3)实例工厂实例化
第一步,创建一个接口和一个实现类,如下:
- public interface UserDao {
- public void save() ;
- }
- import com.dao.UserDao;
-
- public class UserDaoImpl implements UserDao {
- public void save() {
- System.out.println("userDao save ...");
- }
- }
第二步,创建工厂类,并提供实例方法,如下:
- import com.dao.UserDao;
- import com.dao.impl.UserDaoImpl;
-
- public class UserDaoFactory {
- public UserDao getUserDao(){
- return new UserDaoImpl() ;
- }
- }
第三,在spring的配置文件中添加以下内容:
- "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="userDaoFactory" class="UserDaoFactory"/>
- <bean id="userDao" factory-bean="userDaoFactory" factory-method="getUserDao"/>
- beans>
第四步,编写测试类,获取IOC容器,并使用bean对象执行方法
- import com.dao.UserDao;
- import com.service.BookService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- // //获取bean对象,并执行相应的方法
- // BookDao bookDao = (BookDao) applicationContext.getBean("bookDao");
- // bookDao.save();
- // System.out.println("-------------");
- // BookService bookService = (BookService) applicationContext.getBean("bookService");
- // bookService.save();
- // OrderDao orderDao = (OrderDao) applicationContext.getBean("OrderDao");
- // orderDao.save();
- UserDao userDao = (UserDao) applicationContext.getBean("userDao");
- userDao.save();
- }
- }
关于Spring中对bean生命周期控制提供了两种方式:
在配置文件中的bean标签中添加 init-method 和 destroy-method 属性
类实现 InitializingBean 与 DisposableBean 接口,这种方式了解下即可
下面演示在配置文件中配置去控制bean的生命周期,如下:
第一步,创建接口和实现方法,如下:
- public interface BookDao {
- public void save() ;
- public void init() ;
- public void destroy() ;
- }
- import com.dao.BookDao;
-
- public class BookDaoImpl implements BookDao {
-
- public void save() {
- System.out.println("book dao save ...");
- }
- //bean初始化对应的操作
- public void init(){
- System.out.println("bean 初始化...");
- }
- //bean销毁前的操作
- public void destroy(){
- System.out.println("bean 销毁...");
- }
- }
第二步,在spring的配置文件中配置bean的初始化方法和销毁方法。
- "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="bookDao" class="com.dao.impl.BookDaoImpl" init-method="init" destroy-method="destroy"/>
-
- beans>
第三步,编写测试类,获取IOC容器,根据bean对象执行相应的方法。
- import com.dao.BookDao;
- import com.dao.OrderDao;
- import com.dao.UserDao;
- import com.service.BookService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- // //获取bean对象,并执行相应的方法
- BookDao bookDao = (BookDao) applicationContext.getBean("bookDao");
- bookDao.save();
- applicationContext.close();
- // System.out.println("-------------");
- // BookService bookService = (BookService) applicationContext.getBean("bookService");
- // bookService.save();
- // OrderDao orderDao = (OrderDao) applicationContext.getBean("OrderDao");
- // orderDao.save();
- // UserDao userDao = (UserDao) applicationContext.getBean("userDao");
- // userDao.save();
- }
- }
1)需要定义两个接口和接口的实现类(略),在业务层使用setter方法进行注入,可以同时注入多个,如下:
- import com.dao.BookDao;
- import com.dao.UserDao;
- import com.service.BookService;
-
- public class BookServiceImpl implements BookService {
- BookDao bookDao ;
- UserDao userDao ;
- public void save() {
- bookDao.save();
- userDao.save();
- System.out.println("book service save...");
- }
-
- public void setBookDao(BookDao bookDao) {
- this.bookDao = bookDao;
- }
-
- public void setUserDao(UserDao userDao) {
- this.userDao = userDao;
- }
- }
2)在spring的配置文件中对注入的对象进行配置,如下:
- "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="bookDao" class="com.dao.impl.BookDaoImpl">
- <property name="database" value="mysql"/>
- <property name="connectionNum" value="10"/>
- bean>
- <bean id="userDao" class="com.dao.impl.UserDaoImpl"/>
- <bean id="bookService" class="com.service.impl.BookServiceImpl">
- <property name="bookDao" ref="bookDao"/>
- <property name="userDao" ref="userDao"/>
- bean>
-
- beans>
3)编写测试类,获得IOC容器,通过bean实现方法。
- import com.service.BookService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- // //获取bean对象,并执行相应的方法
- BookService bookService = (BookService) applicationContext.getBean("bookService");
- bookService.save();
- // applicationContext.close();
- // System.out.println("-------------");
- // BookService bookService = (BookService) applicationContext.getBean("bookService");
- // bookService.save();
- // OrderDao orderDao = (OrderDao) applicationContext.getBean("OrderDao");
- // orderDao.save();
- // UserDao userDao = (UserDao) applicationContext.getBean("userDao");
- // userDao.save();
- }
- }
1)创建接口和实现类,如下:
- public interface BookDao {
- public void save() ;
- }
- import com.dao.BookDao;
-
- public class BookDaoImpl implements BookDao {
- private String database ;
- private int connectionNum ;
-
- public BookDaoImpl(String database, int connectionNum) {
- this.database = database;
- this.connectionNum = connectionNum;
- }
-
- public void save() {
- System.out.println("book dao save ...");
- System.out.println(database + " " + connectionNum);
- }
-
- }
- public interface UserDao {
- public void save() ;
- }
- import com.dao.UserDao;
-
- public class UserDaoImpl implements UserDao {
- public void save() {
- System.out.println("userDao save ...");
- }
-
-
- }
2)在业务层,进行构造器注入,如下:
- public interface BookService {
- public void save() ;
- }
- import com.dao.BookDao;
- import com.dao.UserDao;
- import com.service.BookService;
-
- public class BookServiceImpl implements BookService {
- BookDao bookDao ;
- UserDao userDao ;
-
- public BookServiceImpl(BookDao bookDao, UserDao userDao) {
- this.bookDao = bookDao;
- this.userDao = userDao;
- }
-
- public void save() {
- bookDao.save();
- userDao.save();
- System.out.println("book service save...");
- }
-
- }
3)配置spring的配置文件,如下:
- "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="bookDao" class="com.dao.impl.BookDaoImpl">
- <constructor-arg name="database" value="mysql"/>
- <constructor-arg name="connectionNum" value="100"/>
- bean>
- <bean id="userDao" class="com.dao.impl.UserDaoImpl"/>
- <bean id="bookService" class="com.service.impl.BookServiceImpl">
- <constructor-arg name="bookDao" ref="bookDao"/>
- <constructor-arg name="userDao" ref="userDao"/>
- bean>
-
- beans>
4)编写测试方法,获取IOC,通过bean对象进行方法测试。
- import com.service.BookService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- // //获取bean对象,并执行相应的方法
- BookService bookService = (BookService) applicationContext.getBean("bookService");
- bookService.save();
- // applicationContext.close();
- // System.out.println("-------------");
- // BookService bookService = (BookService) applicationContext.getBean("bookService");
- // bookService.save();
- // OrderDao orderDao = (OrderDao) applicationContext.getBean("OrderDao");
- // orderDao.save();
- // UserDao userDao = (UserDao) applicationContext.getBean("userDao");
- // userDao.save();
- }
- }
1. 自动装配用于引用类型依赖注入,不能对简单类型进行操作。
2. 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用。
3. 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用。
4. 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效。
1)使用setter方法进行注入,可以使用自动装配,setter方法注入如下:
- import com.dao.BookDao;
- import com.dao.UserDao;
- import com.service.BookService;
-
- public class BookServiceImpl implements BookService {
- BookDao bookDao ;
- UserDao userDao ;
-
- public void setBookDao(BookDao bookDao) {
- this.bookDao = bookDao;
- }
-
- public void setUserDao(UserDao userDao) {
- this.userDao = userDao;
- }
-
- public void save() {
- bookDao.save();
- userDao.save();
- System.out.println("book service save...");
- }
-
- }
2)在配置文件中加上autowire=byType可以实现按照类型进行装配。
- "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="bookDao" class="com.dao.impl.BookDaoImpl">
- <constructor-arg name="database" value="mysql"/>
- <constructor-arg name="connectionNum" value="100"/>
- bean>
- <bean id="userDao" class="com.dao.impl.UserDaoImpl" />
- <bean id="bookService" class="com.service.impl.BookServiceImpl" autowire="byType">
- bean>
-
- beans>
3)当然也可以将autowire=byName,按照名称进行装配。
- "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="bookDao" class="com.dao.impl.BookDaoImpl">
- <constructor-arg name="database" value="mysql"/>
- <constructor-arg name="connectionNum" value="100"/>
- bean>
- <bean id="userDao" class="com.dao.impl.UserDaoImpl" />
- <bean id="bookService" class="com.service.impl.BookServiceImpl" autowire="byName">
- bean>
-
- beans>
1)定义一个接口,并定义一个接口实现类,在实现类中使用setter方法完成集合注入。
-
- public interface BooksDao {
- public void save() ;
- }
- import java.util.*;
- public class BooksDaoImpl implements BooksDao {
- private int [] array ;
- private List
list ; - private Set
set ; - private Map
map ; - private Properties properties ;
-
- public void setArray(int[] array) {
- this.array = array;
- }
-
- public void setList(List
list) { - this.list = list;
- }
-
- public void setSet(Set
set) { - this.set = set;
- }
-
- public void setMap(Map
map) { - this.map = map;
- }
-
- public void setProperties(Properties properties) {
- this.properties = properties;
- }
-
- public void save() {
- System.out.println("book dao save ...");
- System.out.println("遍历数组" + Arrays.toString(array));
- System.out.println("遍历list" + list);
- System.out.println("遍历set" + set);
- System.out.println("遍历map" + map);
- System.out.println("遍历properties" + properties);
- }
- }
2)在spring的配置文件中,注入具体的数据,如下:
- "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="bookDao" class="com.dao.impl.BookDaoImpl">
- <constructor-arg name="database" value="mysql"/>
- <constructor-arg name="connectionNum" value="100"/>
- bean>
- <bean id="booksDao" class="com.dao.impl.BooksDaoImpl">
-
- <property name="array">
- <array>
- <value>10value>
- <value>20value>
- <value>100value>
- array>
- property>
-
- <property name="list">
- <list>
- <value>baiduvalue>
- <value>ailivalue>
- <value>zijievalue>
- list>
- property>
-
- <property name="set">
- <set>
- <value>beijingvalue>
- <value>nanjingvalue>
- <value>shanghaivalue>
- set>
- property>
-
- <property name="map">
- <map>
- <entry key="country" value="China"/>
- <entry key="province" value="jiangsu"/>
- <entry key="city" value="nanjing"/>
- map>
- property>
-
- <property name="properties">
- <props>
- <prop key="fruit">香蕉prop>
- <prop key="hobby">跑步prop>
- <prop key="running">篮球prop>
- props>
- property>
-
- bean>
-
- beans>
3)编写测试类进行测试,获取IOC容器,通过bean对象访问方法。
- import com.dao.impl.BooksDao;
- import com.service.BookService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- // //获取bean对象,并执行相应的方法
- BooksDao booksDao = (BooksDao) applicationContext.getBean("booksDao");
- booksDao.save();
- // applicationContext.close();
- // System.out.println("-------------");
- // BookService bookService = (BookService) applicationContext.getBean("bookService");
- // bookService.save();
- // OrderDao orderDao = (OrderDao) applicationContext.getBean("OrderDao");
- // orderDao.save();
- // UserDao userDao = (UserDao) applicationContext.getBean("userDao");
- // userDao.save();
- }
- }
1)在pom.xml文件中导入相关依赖jar包,如下:
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
-
- <groupId>org.examplegroupId>
- <artifactId>java02artifactId>
- <version>1.0-SNAPSHOTversion>
-
- <dependencies>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>5.2.10.RELEASEversion>
- dependency>
-
-
- <dependency>
- <groupId>com.mchangegroupId>
- <artifactId>c3p0artifactId>
- <version>0.9.5.5version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>8.0.20version>
- dependency>
-
-
- dependencies>
-
-
-
-
- project>
2)在applicationContext.xml配置文件中配置第三方bean
- "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="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
- <property name="driverClass" value="com.mysql.jdbc.Driver"/>
- <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sping_db"/>
- <property name="user" value="root"/>
- <property name="password" value="root"/>
- bean>
-
- beans>
3)编写测试类,获取IOC容器,进行测试
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- import javax.sql.DataSource;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- // //获取bean对象,并执行相应的方法
- DataSource dataSource = (DataSource) applicationContext.getBean("dataSource");
- System.out.println(dataSource);
-
-
- }
- }
1)在pom.xml文件中引入druid的jar包的依赖,如下:
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
-
- <groupId>org.examplegroupId>
- <artifactId>java02artifactId>
- <version>1.0-SNAPSHOTversion>
-
- <dependencies>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>5.2.10.RELEASEversion>
- dependency>
-
-
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druidartifactId>
- <version>1.1.16version>
- dependency>
- dependencies>
-
- project>
2)在applicationContext.xml配置文件中配置第三方bean
- "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="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
- <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/sping_db"/>
- <property name="username" value="root"/>
- <property name="password" value="root"/>
- bean>
-
- beans>
3)编写测试类测试
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- import javax.sql.DataSource;
-
- public class app {
- public static void main(String[] args) {
- //获取IOC容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml") ;
- // //获取bean对象,并执行相应的方法
- DataSource dataSource = (DataSource) applicationContext.getBean("dataSource");
- System.out.println(dataSource);
-
-
- }
- }
1)resources下创建一个jdbc.properties文件,并添加对应的属性键值对
- jdbc.driver=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
- jdbc.username=root
- jdbc.password=root
2)开启context命名空间,加载properties配置文件,完成属性注入
- "1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
- <context:property-placeholder location="jdbc.properties"/>
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
- <property name="driverClassName" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- bean>
- <bean id="orderDao" class="com.dao.impl.OrderDaoImpl">
- <property name="name" value="${jdbc.username}"/>
- bean>
-
- beans>