使用注解配置IoC时,bean.xml需要更换不同的约束。
(1)搭建开发环境
新建maven工程,编写pom文件
<?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.cncs</groupId>
<artifactId>day01_01spring</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>
(2)编写业务层接口
package com.cncs.service;
public interface AccountService {
void save();
}
(3)编写业务层实现类
package com.cncs.service.impl;
import com.cncs.dao.AccountDao;
import com.cncs.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
@Service
@Scope("prototype")
public class AccountServiceImpl implements AccountService {
// @Autowired
// @Qualifier("accountDao2")
@Resource(name = "accountDao1")
private AccountDao accountDao;
@Override
public void save() {
accountDao.save();
}
@PostConstruct
public void init(){
System.out.println("初始化了。。。");
}
@PreDestroy
public void destory(){
System.out.println("销毁了。。。");
}
}
(4)编写持久层接口
package com.cncs.dao;
public interface AccountDao {
/**
* 存钱
*/
void save();
}
(5)编写持久层接口的两个实现类AccountDaoImpl1和AccountDaoImpl2,业务层依赖注入时会根据注解中配置的名称选择实现类。
AccountDaoImpl1类
package com.cncs.dao.impl;
import com.cncs.dao.AccountDao;
import org.springframework.stereotype.Repository;
@Repository("accountDao1")
public class AccountDaoImpl1 implements AccountDao {
@Override
public void save() {
System.out.println("111存钱成功!");
}
}
AccountDaoImpl2类
package com.cncs.dao.impl;
import com.cncs.dao.AccountDao;
import org.springframework.stereotype.Repository;
@Repository("accountDao2")
public class AccountDaoImpl2 implements AccountDao {
@Override
public void save() {
System.out.println("222存钱成功!");
}
}
(6)编写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"
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
http://www.springframework.org/schema/context/spring-context.xsd">
<!--告诉spring创建容器时要扫描的包-->
<context:component-scan base-package="com.cncs"></context:component-scan>
</beans>
(7)编写测试类
package com.cncs.test;
import com.cncs.service.AccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AccountTest {
public static void main(String[] args) {
//获取spring核心容器
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//获取service对象
AccountService accountService = (AccountService) ac.getBean("accountServiceImpl");
AccountService accountService2 = (AccountService) ac.getBean("accountServiceImpl");
System.out.println(accountService==accountService2);
ac.close();
//获取dao对象
// AccountDao accountDao = ac.getBean("accountDao",AccountDao.class);
// System.out.println(accountService);
// accountService.save();
}
}