- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Spring面经
说说Spring常用的几个注解?
@Component
取代.xml中的bean id=;用于三层架构类之外。
@Controller
衍生注解;用于Controller层
@Service
衍生注解;用于Service层
@Repository
衍生注解;用于Dao层
@Bean
取代.xml中工厂创建bean对象,方法的返回值成为bean对象。
@Autowired
取代.xml中property中的ref注入,底层是CGLIB动态代理。这个是本地注入。
@Aspect
定义在类上;设置当前类为切面类
@Before
定义在方法上;标注当前方法作为前置通知
谈谈你对Spring的理解?
Spring是一个完整的生态,不单单是一个技术框架,它最重要的是拐持扩展性!扩展性!扩展性!
Spring两大核心思想是什么?
IOC:解耦,使代码复用,可维护性大幅提升
AOP:提供切面编程,同样增强生产力。
Spring 框架中都用到了哪些设计模式?
工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
单例模式:Bean默认为单例模式。
代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。
说一说你对IOC的理解?
IoC(Inversion Of Control)控制反转,其实是一种思想,用于解决程序间的耦合问题。【解耦】
原本我们创建对象是直接在类中,通过new的方式创建,控制权在于程序员自己,现在我们把new对象的工作交给spring完成,我们只需要通过配置文件进行配置即可。反转的是对象的创建权力。【便捷】
ioc容器,可以简单理解为一个工厂,但是他的功能比普通工厂要强大很多,内部帮助我们完成了对象的创建和效果的整个过程管理,同时提供了很多扩展机会。【可扩展】
IOC的原理是什么?
工厂模式+反射机制。
Bean对象的创建方式有哪几种?
三种:
1、通过IoC直接创建bean对象
2、通过IoC创建bean工厂,再通过bean工厂的方法创建bean对象
3、通过IoC创建bean工厂,再通过bean工厂的静态方法创建bean对象
Spring有哪些依赖注入法?
有4中注入方式:
1.Set方法注入:注入最简单,最常用的注入方式,支持注解+xml。
2.构造器注入:是指带有参数的构造函数注入,支持注解+xml
3.静态工厂的方式注入:通过调用静态工厂的方法来获取自己需要的对象,只支持xml。
4.实例工厂的方式注入:获取对象实例的方法不是静态的,所以需要new一个工厂类,再调用普通的实例方法,只支持xml。
有两种实现方式: 1.注解(@Autowired,@Resource,@Required)
2.配置文件(xml)
使用@Autowired注解自动装配的过程是怎样的?
使用@Autowired注解来自动装配指定的bean。在使用@Autowired注解之前需要在Spring配置文件进行配置,context:annotation-config /。
在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性。在使用@Autowired时,首先在容器中查询对应类型的bean:
如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据;
如果查询的结果不止一个,那么@Autowired会根据名称来查找;
如果上述查找的结果为空,那么会抛出异常。解决方法时,使用required=false。
Spring框架中的单例bean是线程安全的吗?
不是,Spring框架中的单例bean不是线程安全的。
spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。
实际上大部分时候 spring bean 无状态的(比如 dao 类),所以某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model 对象),那就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”(单例)变更为“prototype”(多例
文档评论(0)