项目结构:
一个接口,三个实现类
源代码:
config包下
Myconfig.java
package config;
import dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
@Configuration
@ComponentScan(basePackages = {"config","controller","dao"})
public class Myconfig {
@Bean
@Lazy(true)
public String testPersonDao(@Autowired@Qualifier("person") Dao dao)
{
dao.add();
return "hello,spring!";
}
@Bean
@Lazy(true)
@Autowired
public int testEmployeeDao(@Qualifier("emp") Dao dao) {
dao.add();
return 0;
}
@Bean("student")
@Lazy(true)
public double testStudentDao(@Autowired @Qualifier("std") Dao dao) {
dao.add();
return 0.;
}
@Bean
@Lazy(true)
@Autowired
public Object testDao(Dao dao) {
dao.add();
return new Object();
}
}
controller包下
ControllerTest.java
package controller;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import config.Myconfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class ControllerTest {
static AnnotationConfigApplicationContext ctx = null;
@BeforeAll
public static void before() {
ctx = new AnnotationConfigApplicationContext(Myconfig.class);
System.out.println();
}
@AfterAll
public static void after() {
ctx.close();
}
@Test
public void test1() {
ctx.getBean("testPersonDao", String.class);
}
@Test
public void test2() {
ctx.getBean("testEmployeeDao", int.class);
}
@Test
public void test3() {
ctx.getBean("student", double.class);
}
//-------------------------------------------------
@Test
public void test4() {
ctx.getBean("testDao", Object.class);
}
}
dao包下 (创建顺序:创建dao包,然后创建Dao.interface 再创建3个实现类)
Dao.interface(接口)
package dao;
public interface Dao {
void add();
}
impl包下
EmployeeDao.java
package dao.impl;
import dao.Dao;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component("emp")
@Lazy(true)
public class EmployeeDao implements Dao {
@Override
public void add() {
System.out.println("*****向Employee表插入记录*****");
}
}
PersonDao.java
package dao.impl;
import dao.Dao;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component("person")
@Lazy(true)
public class PersonDao implements Dao {
@Override
public void add() {
System.out.println("*******向person表插入记录*******");
}
}
StudentDao.java
package dao.impl;
import dao.Dao;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component("std")
@Lazy(true)
public class StudentDao implements Dao {
@Override
public void add() {
System.out.println("*******向Student表插入记录*******");
}
}
运行效果:
Test1
Test2
Test3