Spring 中使用注解注入

注解:就是一个类,使用 @ 注解名称。

实际开发中:使用注解取代 xml 配置文件。

1、常用注解释义

@component

取代 <bean class="">

@Component("id")

取代 <bean id="" class="">

web开发,提供3个 @Component 注解衍生注解取代<bean class="">

@Repository(“名称”):dao层

@Service(“名称”):service层

@Controller(“名称”):web层

web 开发中其他常用注解

@Autowired:自动根据类型注入

@Qualifier(“名称”):指定自动注入的id名称

@Resource(“名称”)

@ PostConstruct 自定义初始化

@ PreDestroy 自定义销毁

2、案例代码演示

接口和实现类
public interface UserService {    void add(User user);}=========================================================================================@Componentpublic class UserServiceImpl implements UserService {    @Override    public void add(User user) {        System.out.println("添加用户信息..."+user);    }}
配置 bean.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.xsd                           http://www.springframework.org/schema/context                           http://www.springframework.org/schema/context/spring-context.xsd">    <!-- 开启注解-->    <context:annotation-config/>    <!-- 注解的位置-->    <context:component-scan base-package="com.example.demo"/></beans>
测试函数
public class ServiceTest {    public static void main(String[] args) {                ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");        UserService userService = context.getBean(UserServiceImpl.class);                User user = new User();        user.setUsername("元始天尊");        user.setAge(999);        user.setPassword("555");                userService.add(user);    }}
控制台日志信息如下:

添加用户信息...User{username='元始天尊', password='555', age=999}

3、重点:注解是如何取代 xml 中 bean 的配置

a、在类中声明@Component 相当于配置了 :

<bean class="com.example.demo.service.impl.UserServiceImpl"></bean>

b、Spring默认情况下注解不生效,需要开启注解功能 :

<!-- 开启注解--><context:annotation-config/><!-- 注解的位置--><context:component-scan base-package="com.example.demo"/>

c、使用注解时 需注意 bean.xml 配置的约束文件,否则不会生效:

4、还可以使用以下配置

@Component("userService")public class UserServiceImpl implements UserService {    private String name;    public void setName(String name) {        this.name = name;    }    @Override    public void add() {        System.out.println("创建用户...." + name);    }    @Override    public void add(User user) {        System.out.println("添加用户信息..."+user);    }}
public class ServiceTest {    public static void main(String[] args) {        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");        UserService userService = (UserService)context.getBean("userService");        User user = new User();        user.setUsername("元始天尊");        user.setAge(999);        user.setPassword("555");        userService.add(user);    }}
2 种运行的结果都是一样的。

@Component("userService") 就是加上了 id ,就相当于在 Spring 容器中注入的时候有了唯一的 id 号码,所以在获取的时候可以通过 id 获取,即UserService userService = (UserService)context.getBean("userService");。