Spring全家桶
Spring Framework:基石Spring Boot:build anythingSpring Cloud:coordinate anythingSpring Cloud Data Flow:connect anythingSpring Framework
Spring Core IoC、AOP(IoC控制反转,AOP面向切面,是Spring的核心,是管理bean的思想) Spring Data Access Transactions、Spring MyBatis(数据库事务和mybatis) Web Servlet Spring MVC(web服务) Integration Email、Scheduling、AMQP、Security(邮件,定时任务,消息队列,安全服务)要给ioc容器两份数据,一份那些pojo文件,另一个是配置文件
下图是IoC的一个原理图,我们将业务对象和配置文件注入spring容器,就能够使用,为了更好的理解,我们用代码来展示一下。
当我们需要在class A里面使用class B时,一般情况下,需要在A的代码中显式的new一个B的对象。那么用IoC的思想,采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML,spring里用注解代替配置文件)来指定。
上一篇博客最后,做了一个简单的示例,现在我们假设有这样一个业务,当用户访问时,我们从数据库里查询热搜词条返回,后端接到这个请求怎么去处理呢。首先是controller层,它负责管理业务(service)调度和跳转,它接到请求后让相应的service去负责,service层负责具体的业务,业务里涉及到数据库的由dao层负责。如图创建好相应的包和类。
package com.neu.langsam.nowcoder.controller; import com.neu.langsam.nowcoder.service.HotwordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HotwordController { @Autowired HotwordService hotwordService; @RequestMapping(value = "/hotword") @ResponseBody public String getHotword(){ return hotwordService.getHotword(); } } 12345678910111213141516171819202122 package com.neu.langsam.nowcoder.service; import com.neu.langsam.nowcoder.dao.HotwordDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class HotwordService { @Autowired HotwordDao hotwordDao; public String getHotword(){ return hotwordDao.findAll(); } } 1234567891011121314151617 package com.neu.langsam.nowcoder.dao; import org.springframework.stereotype.Repository; @Repository public class HotwordDao { public String findAll(){ return "秃头"; } } 123456789101112ass HotwordDao { public String findAll(){ return “秃头”; } }
123456789101112
为了方便,没有连接数据库,直接返回了一个词。可以看到,在controller层中,我们调用了service层的代码,却不是直接new一个对象,而是用@Autowired注解,并在类上使用了@Controller注解,这些注解帮助我们自动配置并注入对象,我们在使用时就不用new对象,从而减少代码耦合。