pom.xml
<?xml version="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.0</modelVersion>
<groupId>com.qublog</groupId>
<artifactId>spring03</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
</project>
AccountDao接口:
package com.qublog.dao;
//账户的持久层接口
public interface AccountDao {
//模拟保存账户
void saveAccount();
}
AccountDaoImpl类:
package com.qublog.dao.impl;
import com.qublog.dao.AccountDao;
//账户的持久层实现类
public class AccountDaoImpl implements AccountDao {
public void saveAccount() {
System.out.println("保存了账户");
}
}
AccountService接口:
package com.qublog.service;
//账户业务层接口
public interface AccountService {
//模拟保存账户
void saveAccount();
}
AccountServiceImpl类:
package com.qublog.service.impl;
import com.qublog.dao.AccountDao;
import com.qublog.dao.impl.AccountDaoImpl;
import com.qublog.service.AccountService;
//账户的业务层实现类
public class AccountServiceImpl implements AccountService {
private AccountDao accountDao = new AccountDaoImpl();
public AccountServiceImpl() {
System.out.println("对象创建了");
}
public void saveAccount() {
accountDao.saveAccount();
}
}
bean.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">
<!-- 把对象的创建交给spring来管理 -->
<bean id="accountService" class="com.qublog.service.impl.AccountServiceImpl"></bean>
<bean id="accountDao" class="com.qublog.dao.impl.AccountDaoImpl"></bean>
</beans>
Client类:
package com.qublog.ui;
import com.qublog.dao.AccountDao;
import com.qublog.service.AccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
//模拟一个表现层,用于调用业务层
public class Client {
//获取spring的IoC核心容器,并根据id获取对象
/*
* ApplicationContext的三个常用实现类:
* ClassPathXmlApplicationContext:它可以加载类路径下的配置文件,要求配置文件必须在类路径下。
* FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件(必须有访问权限)。
* AnnotationConfigApplicationContext:它是用于读取注解创建容器的。
*
* 核心容器的两个接口引发出的问题
* ApplicationContext:它构建核心容器时,创建对象采取的策略是采用立即加载的方式,
* 也就是说,只要一读取完配置文件马上就创建配置文件中的配置对象。
*
* BeanFactory:它在构建核心容器时,创建对象采取的策略是采用延迟加载的方式,
* 也就是说,什么时候根据id获取对象了,什么时候才真正创建对象。
* */
public static void main(String[] args) {
//获取核心容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//根据id获取bean对象,下面两种方式都可以
AccountService as = (AccountService)ac.getBean("accountService");
AccountDao adao = ac.getBean("accountDao",AccountDao.class);
System.out.println(as);
System.out.println(adao);
//accountService.saveAccount();
}
}
ApplicationContext的三个常用实现类:
- ClassPathXmlApplicationContext:它可以加载类路径下的配置文件,要求配置文件必须在类路径下。
- FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件(必须有访问权限)。
- AnnotationConfigApplicationContext:它是用于读取注解创建容器的。