Spring中注解配置解析
Spring会搜索显式指定的路径下的Java类,然后将带有特殊Annotation标注的类,全部注册为Spring Bean。省去了自己再xml文件中复杂的配置,由系统自动扫描。
注解的种类有如下:
1、@Component:标注一个普通的Spring Bean类
2、@Controller:标注一个控制器组件类
3、@Service:标注一个业务逻辑组件类
4、@Repository:标注一个DAO组件类
5、•@Autowired:用于对Bean的属性变量属性的settter方法及构造方法进行标注,配合对应的注解处理器完成Bean的自动装配工作。
6、•@Resource:其作用和@Autowired一样。区别在于@Autowired默认按照Bean类型装配,而@Resource默认按照Bean实例名称进行装配。@Resource有两个属性:name、type。这个比较常用。
7、@Qualifier:与@Autowired注解配合使用,会将默认的按Bean类型装配修改为按Bean实例名称装配,Bean的实例名称由@Qualifier注解的参数指定。
下面使用一个实例来更加深入的解析。
问题:判断输入的userName和password是否和数据库中匹配。
步骤;
1、新建一个User类,里面又userName和password两个属性,都是String类型
2、新建一个DBcon.java用来连接数据库。
3、新建一个Dao层接口IUserDao里面有isexist()方法,并新建一个UserDao来实现方法。
4、新建一个Service层接口IUserService里面有isexist()方法,并新建一个UserService来实现方法。通过调用UserDao对象来实现。
5、新建一个UserController来实现控制。
6、总体调用顺序为UserController调用UserService,再有UserService调用UserDao。
以下是代码:
DBcon:
//连接数据库 public class DBcon { public Connection getConnection(){ //链接数据库 String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/db_user?useUnicode=true&characterEncoding=utf-8"; String uname = "root"; String upass = "123"; try { Class.forName(driver); Connection con = DriverManager.getConnection(url, uname, upass); System.out.print("驱动并连接成功"); return con; } catch (Exception e) { System.out.print("驱动或连接不成功"); System.out.print(e.getMessage()); e.printStackTrace(); } return null; } }
IUserDao:
public interface IUserDao { public boolean isExist(User user); }
UserDao:
@Repository("userDao")//括号内的userDao为bean中id,如果不写则默认为类名首字母小写。 public class UserDao implements IUserDao { //实现方法,判断userName和password是否与数据库中相同。 DBcon db=new DBcon(); Connection con=db.getConnection(); Statement stmt; PreparedStatement pstmt; ResultSet rs; public boolean isExist(User user) { List<User> list=new ArrayList<User>(); String upsql="select * from tb_user"; try { pstmt=con.prepareStatement(upsql); rs=pstmt.executeQuery(); while(rs.next()){ User user1=new User(); user1.setId(rs.getString("id")); user1.setUserName(rs.getString("userName")); user1.setPassword(rs.getString("password")); list.add(user1); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } for(int i=0;i<list.size();i++) { if(list.get(i).getUserName().equals(user.getUserName())) { System.out.println("success"); } } // TODO Auto-generated method stub return false; } }
IUserSevice:
public interface IUserSevice { public boolean isexist(User user); }
UserService:
@Service("userService") public class UserService implements IUserSevice { @Resource(name="userDao") public UserDao userDao; public UserService() { super(); } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public boolean isexist(User user) { // TODO Auto-generated method stub return this.userDao.isExist(user); } }
UserController:
@Controller("userController") public class UserController { @Resource(name="userService") public UserService userservice; public UserController() { super(); } public UserService getUserservice() { return userservice; } public void setUserservice(UserService userservice) { this.userservice = userservice; } public boolean isExist(User user) { return this.userservice.isexist(user); } }
User实体类
@Component("user") public class User { private String id; private String userName; private String password; public User() { super(); } public User(String id, String userName, String password) { super(); this.id = id; this.userName = userName; this.password = password; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
测试类:
public class Test { public static void main(String[] args) { User user=new User(); user.setUserName("lee"); user.setPassword("123"); ApplicationContext ac=new FileSystemXmlApplicationContext("src/com/my/bean5/applicationContext.xml");//xml文件位置 UserController uc=(UserController) ac.getBean("userController"); uc.isExist(user); } }
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-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 使用 context 命名空间 ,在配置文件中开启相应的注解处理器 --> <context:component-scan base-package="com.my.bean5" /> //使用这句,系统将自动扫描文件中注解 </beans>
如果不好理解,自己手巧一遍会更加容易理解。
- Spring对注解(Annotation)处理源码分析2——解析和注入注解配置的资源
- Spring对注解(Annotation)处理源码分析2——解析和注入注解配置的资源
- spring注解源码分析-解析和注入注解配置的资源
- 【Spring实战】Spring注解配置工作原理源码解析
- Spring系列之手写注解与配置文件的解析
- Spring对注解(Annotation)处理源码分析2——解析和注入注解配置的资源
- Spring对注解(Annotation)处理源码分析2——解析和注入注解配置的资源
- Java之Spring注解配置bean实例代码解析
- Spring对注解(Annotation)处理源码分析2——解析和注入注解配置的资源
- Spring对注解(Annotation)处理源码分析2——解析和注入注解配置的资源
- Springboot开发(yml配置和注解解析)
- spring 依赖注入注解配置原理解析
- spring注解配置文件
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(四):使用 命名空间 简化配置
- spring 注解配置定时器
- spring-mvc注解web.xml配置问题
- Spring+SpringMVC+Mybatis使用注解方式配置双数据源
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(四):使用 命名空间 简化配置
- Spring Boot教程(一)注解配置与EhCache使用
- 关于Spring的配置文件的注解使用