Spring 讲解(四)

Spring 中使用注解注入

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

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

一、经常使用注解释义web

@componentspring

取代 <bean class="">

@Component("id")ide

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

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

@Repository(“名称”):dao层

@Service(“名称”):service层测试

@Controller(“名称”):web层this

web 开发中其余经常使用注解日志

@Autowired:自动根据类型注入

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

@Resource(“名称”)component

@ PostConstruct 自定义初始化

@ PreDestroy 自定义销毁

二、案例代码演示

接口和实现类
public interface UserService {
    void add(User user);
}

=========================================================================================
@Component
public 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}

三、重点:注解是如何取代 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 配置的约束文件,不然不会生效:

四、还可使用如下配置

@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");。

相关文章
相关标签/搜索