spring优点

qq_45371589 2019-07-15 03:33:46
Spring为了简化java开发采用的四种策略 1、采用轻量级的pojo,最小侵入式编程。 2、依赖注入(DI)和面向接口编程实现松耦合。 3、基于切面和惯例进行声明式编程 4、通过切面和模板减少样板式代码 Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入。 DI-Dependency Injection能够让相互协作的软件组件保持松耦合,而AOP(面向切面编程-aspect-oriented programming)则是把应用中各处的功能分离出来形成可以重用的组件。 AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。 面试Spring之bean的生命周期 1、实例化一个Bean--也就是我们常说的new; 2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入; 3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值 4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以); 5、如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法); 6、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术; 7、如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。 8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法、; 注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton,这里我们不做赘述。 9、当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法; 10、最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。 Spring框架的主要功能是通过其核心容器来实现的。Spring提供了2种核心容器:BeanFactory、ApplicationContext。 BeanFactory BeanFactory是一个管理Bean的工厂,主要负责初始化各种Bean,并调用它们的声明周期方法。 BeanFactory由BeanFactory接口定义。BeanFactory接口的常用实现类:XmlBeanFactory类。 创建一个BeanFactory的实例: 1   Resource resource=new FileSystemResource("D:/test/src/applicationContext.xml"); 2 BeanFactory beanFactory=new XmlBeanFactory(resource); 创建一个Spring容器,并使用xml配置文件来初始化容器。参数是Resource类型,指定容器的配置文件。 因为要使用绝对路径,不方便程序移植,不推荐使用。 ApplicationContext ApplicationContext是BeanFactory的子接口,被称为应用上下文。除了有BeanFactory的全部功能,还提供了对国际化、资源访问、事件传播等的支持,经常用这个。 ApplicationContext接口有2个常用的实现类: ClassPathXmlApplicationContext类 //使用相对路径,最常用,推荐 FileSystemXmlApplicationContext类 //使用绝对路径,不推荐 创建示例: 1   ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); 1   FileSystemXmlApplicationContext applicationContext=new FileSystemXmlApplicationContext("D:/test/src/applicationContext.xml"); BeanFactory和ApplicationContext都是通过xml配置文件加载Bean的,二者的主要区别: BeanFactory:如果Bean的某个属性没有注入,使用getBean()方法时会抛出异常 ApplicationContext:在创建容器时会自检,检查Bean所依赖的属性是否注入。 一般都是优先选择使用ApplicationContext,资源较少时才考虑使用BeanFactory。 创建Spring容器后,就可以获取容器中的Bean了: Object getBean(String name) //通过Bean的id或者name来获取Bean,返回值是Object类型,需要强制类型转换 <T> getBean(String name, Class<T> requiredType) //第二个参数指定该Bean的类,这样返回值就是该类型的,不必转换类型。
...全文
45 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧