spring纯注解案例
spring纯注解案例
我们发现,之所以我们现在离不开xml配置文件,是因为我们有一句很关键的配置:
<!-- 告知spring框架在,读取配置文件,创建容器时,扫描注解,依据注解创建对象,并存入容器中 -->
<context:component-scan base-package=**"com.itheima"**></context:component-scan>
如果他要也能用注解配置,那么我们就可以脱离xml文件了。
1、准备jar包
- 基于maven项目
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
2、编写实体类
package com.yl.bean;
import java.io.Serializable;
/**
* 用户实体类
*/
public class User implements Serializable {
private Integer id;
private String username;
private String password;
public User() {
}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
3、编写业务层
- 业务层接口
package com.yl.service;
/**
* 用户业务层接口
*/
public interface IUserService {
/**
* 查询用户
*/
public void queryUser();
}
- 业务层接口实现类
package com.yl.service.impl;
import com.yl.dao.IUserDao;
import com.yl.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 用户业务层接口实现类
*/
@Service("userService")//使用注解创建业务层bean对象
public class IUserServiceImpl implements IUserService {
@Resource(name = "userDao")//使用注解注入指定bean对象
private IUserDao iUserDao;//用户持久层对象
/**
* 查询用户
*/
@Override
public void queryUser() {
iUserDao.queryUser();
}
}
4、编写持久层
- 持久层接口
package com.yl.dao;
/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 查询用户
*/
public void queryUser();
}
- 持久层接口实现类
package com.yl.dao.impl;
import com.yl.dao.IUserDao;
import org.springframework.stereotype.Repository;
/**
* 用户持久层接口实现类
*/
@Repository("userDao")//使用注解创建持久层bean对象
public class IUserDaoImpl implements IUserDao {
/**
* 查询用户
*/
@Override
public void queryUser() {
System.out.println("查询成功");
}
}
5、配置类
package com.yl.cfg;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
* spring配置类
*/
@Configuration//指定当前类为spring的配置类
@ComponentScan(basePackages = "com.yl")//配置要扫描的包
public class SpringCfg {
}
6、模拟表现层(测试)
package com.yl.ui;
import com.yl.cfg.SpringCfg;
import com.yl.service.IUserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 表现层
*/
public class UI {
public static void main(String[] args) {
//1.获取容器
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringCfg.class);
//2.根据id获取对象
IUserService userService = (IUserService) applicationContext.getBean("userService");
//查询用户
userService.queryUser();
}
}
7、@Configuration注解说明
- 作用:用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)。
- 属性
- value:用于指定配置类的字节码
8、@ComponentScan注解说明
-
作用:用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件中的:
<context:component-scan base-package="com.itheima"/>是一样的。
-
属性
- basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。
记得快乐