Spring是一个包含众多工具等Ioc容器
1.IOC (IOC是控制反转,意思是控制权反转–控制权(正常是谁用这个对象,谁去创建,)-控制对象的控制权,反转的意思是创建对象的控制权,交给了Spring)
优点:解耦合
2.AOP
不采用生成对象,而是你给我什么我就用什么这种,也就是你需要往里面(就像是下面这个图,在main中传递对象。)
Spring可以帮助我们创建对象,可以往里面存,也可以从这个里面取,
我们要做的也就是1.告诉Spring,帮我们创建对象,2.知道如何取出来这些对象
DI是一种实现方式(依赖注入)
@Autowired private BookService bookService;
Autowired:告诉Spring,从容器中取出这个对象,赋值给当前对象的属性
private BookService bookService; public BookController(){ bookService=new BookService(); }
@Component:告诉Spring,帮助我们存储对象。
@Component public class BookService { @Autowired private BookDao bookDao; // private BookService bookService; // // public BookController(){ // bookService=new BookService(); // } public List<BookInfo> getBookList() { List<BookInfo> bookInfos = bookDao.mockData(); for (BookInfo bookInfo : bookInfos) { if (bookInfo.getStatus() == 1) { bookInfo.setStatusCN("可借阅"); } else { bookInfo.setStatusCN("不可借阅"); } } return bookInfos; } }
IOC(依赖对象的创建的控制权,存)一种思想,DI(依赖注入)是一种实现方式
IOC提供两类注解
1.类注解:@Controller,@Service,@Respository,@Component,@Configuration
package com.example.IOCtry; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; //加上Controller才会不报错,假如不加上Controller就会报错 //@Controller public class UserController { public void prin(){ System.out.println("春节快乐"); } }
package com.example.IOCtry; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; @SpringBootApplication public class IoCtryApplication { public static void main(String[] args) { //启动类是帮助我们启动spring,这个命令可以返回一个spring //context上下文,就是spring一个运行环境 ApplicationContext context=SpringApplication.run(IoCtryApplication.class, args); //从容器中拿对象 UserController bean=context.getBean(UserController.class); //如果去掉Control注解,就会报错 bean.prin(); } }
下面这个是getBean的根据名称拿一个类(注意:这个的获取规范是小驼峰),注意这个返回的是一个Object,所以我们需要对他进行类型转换
public static void main(String[] args) { //启动类是帮助我们启动spring,这个命令可以返回一个spring //context上下文,就是spring一个运行环境 ApplicationContext context=SpringApplication.run(IoCtryApplication.class, args); //从容器中拿对象 UserController bean=context.getBean(UserController.class); //如果去掉Control注解,就会报错 bean.prin(); UserService bean2=context.getBean(UserService.class); bean2.doService(); UserService bean3=(UserService) context.getBean("userService"); bean3.doService(); //根据名称和类型获取bean UserService userService=context.getBean("userService",UserService.class); userService.doService(); } }
⚠️特殊情况:假如类名前两位(第一位,第二位字母)都是大写的情况,bean的名称是类名
常见面试题ApplicationContext vs BeanFactory
继承关系和功能方面来说:Spring容器有两个顶级的接口:BeanFactory和ApplicationContext.其中BeanFactory提供基础的访问容器能力,而ApplicationContext属于是BeanFactory的子类,他除了继承了BeanFactory的所有功能之外,他还拥有独特的特性,国际化支持(中日韩等语言)资源访问支持,以及事件传播等方面的支持
从性能方面来说:ApplicationContext是一次性加载并初始化所有的Bean对象,而BeanFactory是需要哪个就去加载哪个,因此会更加清量(空间与时间)
@Service(服务存储)和下面使用方法一致
@Repository(仓库存储)和control使用方法一致
@Repository public class UserRepository { public void doRepository() { //代码格式化快捷键,crtl+alt+l System.out.println("aini"); } }
UserRepository userRepository=context.getBean(UserRepository.class); userRepository.doRepository();
@Component(组件存储)和下面用法一致
@Configuration(配置存储)
// UserRepository userRepository=context.getBean(UserRepository.class); // userRepository.doRepository(); // UserComponent userComponent=context.getBean(UserComponent.class); // userComponent.doComponent(); UserConfig userConfig=context.getBean(UserConfig.class); userConfig.doConfig(); }
package com.example.IOCtry.config; import org.springframework.context.annotation.Configuration; @Configuration public class UserConfig { public void doConfig(){ System.out.println("我也是条狗"); } }
常见面试题二
参数接口和接口响应:@RequestParam,@RequestBody,@ResponseBody
Bean的存储:@Controller,@Service,@Repository,@Component,@Configuration,@Bean
原文地址:https://blog.csdn.net/weixin_72953218/article/details/134719443
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_44488.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!