在浅谈Spring之IOC、DI中写到过根据XML配置文件方式进行Spring开发,那需要我们去编写配置代码,重复且复杂。所以开发Spring的团队推出了注解开发,用注解代替xml配置文件可以简化配置,提高开发效率。
要想进行注解开发,必须在xml中进行一个开启包扫描的配置,描目的是在扫描这些包中的类,查询哪些类上有注解,有就执行注解操作。
<context:component-scan base-package="包名"/>
① @Component
这个注解主要用于代替xml中的bean配置、相当于之前
相当于<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
注意:当此注解作用到类中,会将本类的类名首字母小写作为bean的id属性,将此类完全限定名作为bean的class属性
为了见名知意,提供了3个衍生注解:
- @Repository:用于设置dao层
- @Service: 用于Service层
- @Controller:用于web层
这三个作用和component注解是一样的,只不过是为了区分三层开发
② @Autowired
容器中获取对象的3种方式:
ac.getBean(“userDao”);
ac.getBean(UserDao.class);
ac.getBean(“userDao”,UserDao.class)
对应的注解就是:
-
@Resource :由jdk自带,表达根据id获取。jdk9之后就废弃了。
-
@Autowired :根据类型获取对象
-
@Qualifie :它要与@Autowired一起配合使用, 根据id和类型获取对象
最多使用的还是@Autowired!!!!!!!也就是依赖注入,给对象进行赋值。
简单实现代码如下:
applicationContext.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"
xmlns:p="http://www.springframework.org/schema/p"
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:component-scan base-package="com.itheima" />
<!-- <bean id="userDao" class="UserDaoImpl"></bean>-->
<!-- <bean id="userService" class="UserServiceImpl">-->
<!-- <property name="userDao" ref="userDao"/>-->
<!-- </bean>-->
</beans>
dao层
@Repository
public class UserDaoImpl implements UserDao {
public void testUserDao() {
System.out.println("执行userdao");
}
}
service层
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public void testUser() {
userDao.testUserDao();
}
}
servlet层<用junit单元测试>
public class TestUser {
@Test
public void testUs(){
//创建Spring框架的IOC容器
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) ac.getBean("userServiceImpl");
userService.testUser();
}
}