pom.xml导入spring坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
创建spring配置文件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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 1. 导入坐标-->
<!-- 2. 配置bean-->
<bean id="bookDao" class="org.example.dao.impl.BookDaoImpl" />
<bean id="bookService" class="org.example.service.impl.BookServiceImpl" />
</beans>
实现
package org.example;
import org.example.dao.BookDao;
import org.example.service.BookService;
import org.example.service.impl.BookServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
// 获取IoC容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从容器中获取对象
BookDao bookDao = (BookDao) context.getBean("bookDao");
// 调用方法
bookDao.save();
BookService bookService = (BookService) context.getBean("bookService");
bookService.save();
};
};
使用setter注入
<?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="bookDao" class="org.example.dao.impl.BookDaoImpl"/>
<bean id="userDao" class="org.example.dao.impl.UserDao"/>
<bean id="bookService" class="org.example.service.impl.BookServiceImpl" autowire="byType">
<property name="bookDao" ref="bookDao"/>
<property name="userDao" ref="userDao"/>
</bean>
</beans>
public class BookServiceImpl implements BookService {
private BookDao bookDao;
private UserDao userDao;
public BookServiceImpl(BookDao bookDao) {
this.bookDao = bookDao;
};
public BookServiceImpl() {
};
// setter方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
};
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
};
public void save(){
System.out.println("Service层调用Dao层的方法...");
bookDao.save();
userDao.save();
};
};
使用setter注入时,需要给每一个依赖项设置setter方法,配置文件中的 <property> 坐标中name属性的值实为setter方法的变量名,如:setter方法为 public void setBookDao()
,则name属性的值为bookDao。ref属性的值为一个bean,所以需要注入的bean首先要配置bean。
如果是基本数据类型和String,则不用ref属性,改为value属性。
构造器注入
<?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="bookDao" class="org.example.dao.impl.BookDaoImpl"/>
<bean id="userDao" class="org.example.dao.impl.UserDao"/>
<bean id="bookService" class="org.example.service.impl.BookServiceImpl" autowire="byType">
<constructor-arg ref="bookDao"/>
<constructor-arg ref="userDao"/>
</bean>
</beans>
使用构造器注入时,需要有相应的构造方法,如在bookServiceImpl类中,应该有 public BookServiceImpl(BookDao bookDao, UserDao userDao)
构造方法,同时在配置文件中,应用 <constructor-arg> 标签,其属性与 <property> 基本类似。
自动装配
<bean id="bookService" class="org.example.service.impl.BookServiceImpl" autowire="byType">
在bean标签中添加 autowire 属性,即可实现自动装配。其中byType为按类型装配,常用的还有byName按照名字自动装配。
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ClassPathXmlApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\applicationContext.xml");
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("a1.xml","a2.xml");
<bean id="bookDao"
name="bd BD"
class="dao.impl.BookDaoImpl"
scope="singleton"
init-method="init"
destroy-method="destroy"
autowire="byType"
factory-method="getInstance"
factory-bean="factory.BookDaoFactory"
lazy-init="true"
/>
<!--
依次对应:
bean的ID
bean的别名
bean类型,静态工厂类,FactoryBean类
控制bean的实例化数量(单例、非单例)
生命周期初始化方法
生命周期销毁方法
自动装配类型
bean工厂方法,应用于静态工厂或实例工厂
实例工厂bean
控制bean是否延迟加载
-->
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
BookDao bookDao = ctx.getBean("bookDao", BookDao.class);
BookDao bookDao = ctx.getBean(BookDao.class);