在Spring 中除了可以通过XML 来进行装备,还可以使用注解,Spring 提供了对annotation (注解)的全面支持
常用的注解有
声明bean的注解
@Component 组件,没有明确的角色
@Service 在业务逻辑层使用(service层)
@Repository 在数据访问层使用(dao层)
@Controller 在展现层使用,控制器的声明(C)
注入bean的注解
@Autowired:由Spring提供
@Inject:由JSR-330提供
@Resource:由JSR-250提供
案例
首先,创建一个userDao
1 2 3 4 5
| package com.springdemo;
public interface UserDao { public void save(); }
|
然后创建userDao 的实现类UserDaoImpl
1 2 3 4 5 6 7 8 9 10 11 12
| package com.springdemo;
import com.springdemo.UserDao; import org.springframework.stereotype.Repository;
@Repository("userDao") public class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("userDao.save"); } }
|
创建userService
1 2 3 4 5
| package com.springdemo;
public interface UserService { public void save(); }
|
创建userService 的实现类UserServiceImpl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package com.springdemo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service("userService") public class UserServiceImpl implements UserService { @Resource(name = "userDao") private UserDao userDao; @Override public void save() { this.userDao.save(); System.out.println("userService.save()"); } }
|
创建UserController
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package com.springdemo;
import javax.annotation.Resource; import org.springframework.stereotype.Controller;
@Controller("UserController") public class UserController { @Resource(name="userService")
private UserService userService; public void save(){ this.userService.save(); System.out.println("运行userController.save()"); } }
|
Resource 如果报错,需要在pom.xml 中添加javax.annotation
1 2 3 4 5
| <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency>
|
创建一个beans.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?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-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- xmlns 即 xml namespace xml 使用的命名空间 xmlns:xsi 即 xml schema instance xml 遵守的具体规范 xsi:schemaLocation 本文档 xml 遵守的规范 官方指定 --> <--使用context命名空间在配置文件中开启相应的注解处理器--> <context:annotation-config />
<bean id="userDao" class="com.springdemo.UserDaoImpl"/> <bean id="userService" class="com.springdemo.UserServiceImpl"/> <bean id="userController" class="com.springdemo.UserController"/>
</beans>
|
如果context 报错,确认beans 中的xmlns和xsi 信息是否正确
创建AnnotationAssembleTest
1 2 3 4 5 6 7 8 9 10 11 12 13
| package com.springdemo;
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AnnotationAssembleTest {
public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserController userController = (UserController) applicationContext.getBean("userController"); userController.save(); } }
|
执行结果
1 2 3
| userDao.save userService.save() 运行userController.save()
|
喜欢新事物,关注云计算行业,对新的技术有追求,喜欢写作和coding