2、设计实现三个Bean,使用@Service、@Repository、@Controller注解,并通过ApplicationContext验证它。说明这三个注解的用途。 3、给出@Configuration + @Bean的案例,并通过ApplicationContext验证它。说明这两个注解的用途。 4、设计实现一个Bean,让它实现InitialzingBean、DisposableBean接口,并通过ApplicationContext验证它。说明这两个接口的用途。 5、设计实现一个Bean,让它实现BeanNameAeare、ApplicationContextAeare接口,并通过ApplicationContext验证它。说明这两个接口的用途。 6、设计实现一个Bean,并用@Scope注解它,使得每一次获得该Bean的对象都不同,通过ApplicationContext验证它。说明这个注解的用途。 7、给出@Configuration + @Import的案例,并通过ApplicationContext验证它。说明@Import这个注解的用途。 注意事项: (1)请在程序中加入必要的注释和说明; (2)请采用规范一致的编程风格编写代码。
时间: 2024-02-06 10:12:17 浏览: 99
2、三个Bean的实现
```
@Service
public class UserService {
public void saveUser() {
System.out.println("保存用户信息");
}
}
@Repository
public class UserDao {
public void addUser() {
System.out.println("添加用户信息到数据库");
}
}
@Controller
public class UserController {
@Autowired
private UserService userService;
public void saveUser() {
userService.saveUser();
}
}
```
使用ApplicationContext验证:
```
public class Test {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserController userController = context.getBean(UserController.class);
userController.saveUser();
}
}
```
@Service注解用于标记服务层的Bean;@Repository注解用于标记持久层的Bean;@Controller注解用于标记控制器层的Bean。
3、@Configuration + @Bean的案例
```
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
@Bean
public UserDao userDao() {
return new UserDao();
}
@Bean
public UserController userController() {
return new UserController();
}
}
```
使用ApplicationContext验证:
```
public class Test {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserController userController = context.getBean(UserController.class);
userController.saveUser();
}
}
```
@Configuration注解用于标记配置类,@Bean注解用于标记方法,表示返回值是一个Bean。
4、实现InitialzingBean、DisposableBean接口的Bean
```
public class MyBean implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Bean初始化完成");
}
@Override
public void destroy() throws Exception {
System.out.println("Bean销毁");
}
}
```
使用ApplicationContext验证:
```
public class Test {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyBean myBean = context.getBean(MyBean.class);
((AnnotationConfigApplicationContext) context).close();
}
}
```
InitializingBean接口中的afterPropertiesSet()方法在Bean初始化完成后调用;DisposableBean接口中的destroy()方法在Bean销毁时调用。
5、实现BeanNameAeare、ApplicationContextAeare接口的Bean
```
public class MyBean implements BeanNameAware, ApplicationContextAware {
private String beanName;
private ApplicationContext applicationContext;
@Override
public void setBeanName(String name) {
this.beanName = name;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public void printInfo() {
System.out.println("Bean名称:" + beanName);
System.out.println("Bean所处的应用上下文:" + applicationContext);
}
}
```
使用ApplicationContext验证:
```
public class Test {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyBean myBean = context.getBean(MyBean.class);
myBean.printInfo();
}
}
```
BeanNameAware接口中的setBeanName()方法在Bean的名称设置时调用;ApplicationContextAware接口中的setApplicationContext()方法在Bean所处的ApplicationContext设置时调用。
6、使用@Scope注解实现Bean每次都不同
```
@Service
@Scope("prototype")
public class UserService {
public void saveUser() {
System.out.println("保存用户信息");
}
}
```
使用ApplicationContext验证:
```
public class Test {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService1 = context.getBean(UserService.class);
UserService userService2 = context.getBean(UserService.class);
System.out.println(userService1 == userService2); //输出false
}
}
```
@Scope注解用于标记Bean的作用域,默认为singleton,如果设置为prototype,则每次获取Bean都会创建一个新的对象。
7、使用@Configuration + @Import注解的案例
```
@Configuration
@Import({UserDao.class, UserService.class})
public class AppConfig {
@Bean
public UserController userController() {
return new UserController();
}
}
```
使用ApplicationContext验证:
```
public class Test {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserController userController = context.getBean(UserController.class);
userController.saveUser();
}
}
```
@Import注解用于导入其他的配置类或Bean,可以实现模块化配置。在这个例子中,我们导入了UserDao和UserService两个Bean。
阅读全文