这个问题可能对您有兴趣,以及这个解释。
在每种情况下,您大多数谈论的是相同的事情,Spring只是使用注释来扫描它们,以知道您正在创建或实例化哪种类型的对象。
基本上,所有请求都通过使用@Controller注释的控制器流动。每个方法处理请求,并(如果需要)调用特定的服务类来处理业务逻辑。这些类使用@Service进行注释。控制器可以通过@Autowire自动连接这些类或@Resource资源它们。
@Controller
@RequestMapping("/")
public class MyController {
@Resource private MyServiceLayer myServiceLayer;
@RequestMapping("/retrieveMain")
public String retrieveMain() {
String listOfSomething = myServiceLayer.getListOfSomethings();
return listOfSomething;
}
}
服务类然后执行它们的业务逻辑,如果需要,从一个带有
@Repository注释的存储库类中检索数据。服务层以相同的方式实例化这些类,可以通过自动装配
@Autowire或资源化
@Resource来实现。
@Service
public class MyServiceLayer implements MyServiceLayerService {
@Resource private MyDaoLayer myDaoLayer;
public String getListOfSomethings() {
List<String> listOfSomething = myDaoLayer.getListOfSomethings();
return listOfSomething;
}
}
仓库类构成了DAO,Spring在它们上面使用@Repository注解。实体是由@Repository层接收的单个类对象。
@Repository
public class MyDaoLayer implements MyDaoLayerInterface {
@Resource private JdbcTemplate jdbcTemplate;
public List<String> getListOfSomethings() {
return listOfSomething;
}
}
@Repository、@Service 和 @Controller 是
@Component 的具体实例。所有这些层都可以用 @Component 进行注释,但最好使用真正代表它的名称进行注释。
因此,它们的意思相同,只是用于让Spring知道正在实例化的对象的类型和/或如何包含另一个类的注释不同。