Spring-讲解四

47次阅读

共计 2587 个字符,预计需要花费 7 分钟才能阅读完成。

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);
}

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

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

正文完
 0