使用SMM框架开发企业级应用-----面试题

Spring中的bean

  组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。

  简单地讲,bean就是由IoC容器初始化、装配及管理的对象

  Spring中的bean默认都是单例的(scope="singleton"默认值)

  我们可以设置为多例(scope="prototype")

bean的作用域

  当scope="singleton"时

    Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象

    不管你是否使用,他都存在了,每次获取到的对象都是同一个对象

  当scope="prototype"时

    Prototype是原型类型,它在我们创建容器的时候并没有实例化

    而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象

  1.通过BeanFactory或者ApplicationContext获取实例Bean

  2.set属性注入

  3.如果Bean实现BeanNameAware接口,则调用setBeanName(String name)方法设置Bean的name属性

  4.如果Bean实现BeanFactoryAware接口,则调用setBeanFactory(BeanFactory beanFactory)方法,设置创建该Bean的工厂

  5.如果有定义BeanPostProcessor接口,则调用该接口的postProcessBeforeInitialization(Object bean, String beanName)方法

    该方法可以对Bean实例进行额外的增加处理操作。可以是全局针对所有Bean进行统一处理,ApplicationContext初始化时会自动找到实现该接口的类进行所有Bean的增强处理。

  6.如果Bean实现了InitializingBean接口,且该接口有 @PostConstruct修饰的方法,则执行该方法(该注解方法是在BeanPostProcessor的postProcessBeforeInitialization中执行的),然后执行afterPropertiesSet()方法;

    该方法没有参数,不能对该Bean进行处理,可以增加比如日志、读取配置文件之类的操作。

  7.如果Bean自定义了init-method指定的方法,则调用该方法

  8.接着调用BeanPostProcessor接口的postProcessAfterInitialization(Object bean, String beanName)方法

  9.如果Bean实现了DisposableBean接口,则调用该接口的destory()方法。同InitializingBean类似,该接口如果有指定@PreDestory注解修饰的方法,也会先调用该方法。

  10.如果Bean指定了destory-method方法,则执行该方法

  以上为Bean生命周期顺序。

  说明:

  1.afterPropertiesSet()和init-method有什么区别

    afterPropertiesSet()依赖InitializingBean接口实现,Bean定义时必须实现该接口才能使用,对代码有一定的侵入。init-method只需要指明要调用哪个方法就可以了。同理DiaposableBean的destory()方法和destory-method。

    但是afterPropertiesSet()执行效率比init-method指定的方法高,该方法是直接调用执行,而init-method指定的方法需要通过反射调用。

    init-method和destory-method指定的方法必须是一个无参的方法,否则,初始化会报错。

面试题

  1.有哪些不同的IOC依赖注入方式

    直接的注入(seter)

    构造注入

    P命名标签注入

    往集合内注入(<constructor-ary></constructor-ary>)

    默认往域属性内注入(autowire="byType"与autowire="byName")

  2.java九大隐式对象有哪些

    request              请求对象                类型 javax.servlet.ServletRequest         作用域 Request    对象主要用于处理客户端请求,在(页面转发,获取cookie)用到

    response           响应对象                  类型 javax.servlet.SrvletResponse         作用域  Page     用于处理响应客户端请求,在(页面重定向)中使用

    pageContext     页面上下文对象       类型 javax.servlet.jsp.PageContext        作用域    Page    用于获取页面的上下文,通过此对象可以获取页面的其他8个内置对象

    session             会话对象                  类型 javax.servlet.http.HttpSession          作用域    Session    在网络中被称为会话,一个会话就是浏览器与服务器之间的一次通话(保存登录状态时)

    application          应用程序对象           类型 javax.servlet.ServletContext             作用域    Application  就像全局变量,用于保存应用程序中的共有数据(上传时获取真实路径)

    out                        输出对象                   类型 javax.servlet.jsp.JspWriter               作用域    Page      对象用于在web浏览器内输出信息,数据输出完,要及时关闭输出流

    config                   配置对象                   类型 javax.servlet.ServletConfig              作用域    Page        用于取得服务器的配置信息

    page               页面对象                   类型 javax.lang.Object                             作用域    Page       代表jsp本身,只有在jsp页面内才是合法的

    exception        例外对象                   类型 javax.lang.Throwable                      作用域    page     用于处理jsp页面发生的异常

  3.数据库里的索引和约束是什么

    索引:指向表中数据的指针,把书比作数据,各个章节就相对于数据库中的表,而书的目录就是索引了。

    约束:设计数据库完整性的目的是为了防止数据库存在不符合语义的数据,防止错误信息的输入和输出

  4.DAO的工作原理,能不能重载

    Dao接口就是Mapper接口。映射文件中的namespace的值;接口的方法名,就是映射文件中Mapper的Statement的id值;

    Mapper接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略

  5.Mybatis时如何进行分页的,原理是什么

    Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

    原理:是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

原文地址:https://www.cnblogs.com/haohanwuyin/p/11756610.html

时间: 2024-11-06 09:49:01

使用SMM框架开发企业级应用-----面试题的相关文章

使用SMM框架开发企业级应用-----Spring简介即Spring Ioc

Spring框架简介 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Java应用都可以从S

使用SMM框架开发企业级应用-----打印机案例

Ø 要求:可灵活配置使用彩色墨盒或灰色墨盒 Ø 可灵活配置打印页面的大小 实现步骤 打印机功能的实现依赖于墨盒和纸张(对象间的依赖) 定义Ink和Paper接口 使用Ink接口和Paper接口开发打印机程序 开发Ink接口和Paper接口的实现类:ColorInk,GreyInk和TextPaper 组装打印机,运行调试 测试 原文地址:https://www.cnblogs.com/haohanwuyin/p/11740381.html

使用SMM框架开发企业级应用-----MVC参数传递

处理乱码关于页面传值到后台和后台传值到页面,首先要解决的是中文乱码 post乱码在web.xml中加入过滤器 <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <par

使用SMM框架开发企业级应用-----初始Mybatis的模糊查询以及自动映射

在学习MyBatis过程中想实现模糊查询,下面列举几种方式:1.用${…}代替#{…}    SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');  2.  bind标签  3. CONCAT Mybatis的自动映射 0x00:引子 在 MyBatis 的映射配置文件中,select 标签查询配置结果集时使用过 resultType 属性,当在 resultType 中定义一个 Java 包装类时,

使用SMM框架开发企业级应用-----关联查询

关联映射一对多 以国家和省份对应的一对多关系举例. smbms_role数据库: select u.id,u.userName,u.userRole, r.rid,r.roleName from smbms_user as u,smbms_role as r where u.userRole=r.rid and r.rid=3 SmbmsRole实体类:  Dao层接口:  编写小配置xml文件: 测试: 自连接一对多 数据库: 实体类: public class Category {    

使用SMM框架开发企业级应用-----mybatis注解

@select查詢 @insert添加 @delete刪除 @update修改 @Results自关联 @Results映射 @One UserByRole表: RoleByUser表: @Many RoleByUser表: UserByRole表: 原文地址:https://www.cnblogs.com/haohanwuyin/p/11740304.html

使用SMM框架开发企业级应用-----代理(静态,JDK,CGLIB)

静态代理 步骤一:创建抽象主题(接口) 步骤二:真实业务代码 步骤三:测试 JDK代理 步骤一:创建抽象主题(接口) 步骤二:真实业务代码 步骤三:测试 CGLIB代理 步骤一:代码层 步骤二:测试 public class ServiceCglib { public static void main(String[] args) { //步骤一:目标对象 final Cglib cglib=new Cglib(); //步骤二:生成代理 Enhancer enhancer=new Enhanc

使用SMM框架开发企业级应用-----Spring集合注入和域属性自动注入byName和byType

Spring集合的注入 步骤一:导入依赖 步骤二:创建实体类 步骤三:创建大配置文件 步骤四:测试 域属性自动注入 byName与byType 步骤一:创建两个实体类 public class Student { private Integer stuid; private String stuName; private Teacher teacher; public Teacher getTeacher() { return teacher; } public void setTeacher(

使用SMM框架开发企业级应用-----基础配置

视图解析器 在spring-mvc文件中编写 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.