【Spring】注解器

applicationContext.xml
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6       http://www.springframework.org/schema/beans/spring-beans.xsd
 7       http://www.springframework.org/schema/context
 8   http://www.springframework.org/schema/context/spring-context.xsd">
 9     <!-- 使用context命名空间,开启注解处理器 -->
10     <context:component-scan base-package="com.xiaobiti"/>
11 </beans>

实体:

User.java

 1 package com.xiaobiti.entity;
 2 
 3 import org.springframework.beans.factory.annotation.Value;
 4 import org.springframework.context.annotation.Scope;
 5 import org.springframework.stereotype.Component;
 6 
 7 @Component("user")
 8 @Scope("singleton")//bean作用域单例模式
 9 public class User {
10     @Value("1")
11     private int id;//实例化给id赋值为1
12     @Value("张三")
13     private String name;//实例化给name赋值为张三
14     @Value("123")
15     private String password;//实例化给password赋值为123
16 
17     public int getId() {
18         return id;
19     }
20 
21     public void setId(int id) {
22         this.id = id;
23     }
24 
25     public String getName() {
26         return name;
27     }
28 
29     public void setName(String name) {
30         this.name = name;
31     }
32 
33     public String getPassword() {
34         return password;
35     }
36 
37     public void setPassword(String password) {
38         this.password = password;
39     }
40 
41     @Override
42     public String toString() {
43         return "User{" +
44                 "id=" + id +
45                 ", name='" + name + '\'' +
46                 ", password='" + password + '\'' +
47                 '}';
48     }
49 }

数据访问层:

UserDaoImpl.java

 1 package com.xiaobiti.dao.impl;
 2 
 3 import com.xiaobiti.dao.UserDao;
 4 import com.xiaobiti.entity.User;
 5 import org.springframework.stereotype.Repository;
 6 
 7 import javax.annotation.Resource;
 8 
 9 @Repository("userDao")
10 public class UserDaoImpl implements UserDao {
11     @Resource(name = "user")
12     private User user;
13     @Override
14     public boolean login(String username, String password) {
15         if (username.equals("admin") && password.equals("1234")){
16             return true;
17         }
18         return false;
19     }
20 
21     @Override
22     public void save() {
23         System.out.println("执行dao中的方法");
24         System.out.println(user);
25     }
26 }

UserDao.java

1 package com.xiaobiti.dao;
2 
3 public interface UserDao {
4     public boolean login(String username,String password);
5     public void save();
6 }

业务逻辑层:

UserServiceImpl.java

 1 package com.xiaobiti.service.impl;
 2 
 3 import com.xiaobiti.dao.UserDao;
 4 import com.xiaobiti.service.UserService;
 5 import org.springframework.stereotype.Service;
 6 
 7 import javax.annotation.Resource;
 8 
 9 @Service("userService")
10 public class UserServiceImpl implements UserService {
11     @Resource(name = "userDao")
12     private UserDao userDao;
13     //setter方式注入
14     public void setUserDao(UserDao userDao) {
15         this.userDao = userDao;
16     }
17     @Override
18     public boolean login(String username, String password) {
19         return userDao.login(username,password);
20     }
21     @Override
22     public void save(){
23         userDao.save();
24         System.out.println("执行service中的方法");
25     }
26 }

UserService.java

1 package com.xiaobiti.service;
2 
3 public interface UserService {
4     public boolean login(String username,String password);
5     public void save();
6 }

控制层:

UserController.java

 1 package com.xiaobiti.controller;
 2 
 3 import com.xiaobiti.service.UserService;
 4 import org.springframework.stereotype.Controller;
 5 
 6 import javax.annotation.Resource;
 7 
 8 @Controller("userController")
 9 public class UserController {
10     @Resource(name = "userService")
11     private UserService userService;
12     public void setUserService(UserService userService) {this.userService = userService;}
13     public void save(){
14         userService.save();
15         System.out.println("执行了controller中的方法");
16     }
17 }

运行测试代码:

1 public static void main(String[] args) {
2         //加载核心配置文件
3         ApplicationContext  applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
4         UserController userController = (UserController) applicationContext.getBean("userController");
5         userController.save();
6     }

运行结果:

@Component  用于指定普通bean,可以用于任何层次

@Repository  用于指定数据访问组件bean,用于数据访问层,功能上等同@Component

@Service  用于指定业务逻辑组件bean,用于业务逻辑层,功能上等同@Component

@Controller 用于指定类控制器组件bean,用于控制层,功能上等同@Component

@Resource 用于实现依赖注入

@Resource注解和jdk的版本兼容问题导致空指针异常:

  解决方法:@Resource注解和jdk的版本兼容问题_@resource null_lane_zhou的博客-CSDN博客

posted @ 2023-04-03 09:16  小鼻涕孩  阅读(47)  评论(0)    收藏  举报