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