首先引入spring-context.xml依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.27</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.27</version>
</dependency>
配置类:
@ComponentScan("org.itheima")
@Configuration
public class SpringConfig {
}
dao层:
public interface UserDAO {
public void print();
}
其中@Socpe控制是否为单例模式,singleton(default)、prototype(非单例)
@Repository
@Scope("singleton")
public class UserDAOImpl implements UserDAO {
@Override
public void print() {
System.out.println("userDAOImpl……");
}
@PostConstruct
public void init(){
System.out.println("init……");
}
@PreDestroy
public void destroy(){
System.out.println("destroy……");
}
}
service层:
public interface UserService {
public void write();
}
@Service
public class UserServiceImpl implements UserService {
@Override
public void write() {
System.out.println("UserService……");
}
}
测试类:
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
UserDAO userDAO1 = ctx.getBean(UserDAO.class);
UserDAO userDAO2= ctx.getBean(UserDAO.class);
System.out.println(userDAO1);
System.out.println(userDAO2);
ctx.close();
}
}
运行结果:
扩展::
其中:
@Component一般用于公共类,定义组件Bean,添加到IoC容器中,不区分组件类型
@Repository 用于dao数据访问层
@Service 用于业务处理层
@ Controller 用于表示层
他们的用法基本的等价的,只是用于区分!!!
入门案例:
引入依赖:pom.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 https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.itheima"/>
</beans>
dao层:
public interface UserDAO {
public void print();
}
@Repository
public class UserDAOImpl implements UserDAO {
@Override
public void print() {
System.out.println("userDAOImpl……");
}
}
service层:
public interface UserService {
public void write();
}
@Service
public class UserServiceImpl implements UserService {
@Override
public void write() {
System.out.println("UserService……");
}
}
dao层测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring_config.xml")
public class UserDAOTest {
@Resource
private UserDAO userDAO;
@Test
public void print() {
userDAO.print();
}
}
运行结果:
service测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring_config.xml")
public class UserServiceTest {
@Resource
private UserService userService;
@Test
public void write() {
userService.write();
}
}
运行结果: