什么是spring?spring优点?IOC和AOP的理解?spring配置文件?Spring注解?
1、spring是轻量级开源框架,核心是控制反转IOC和面向切面编程AOP
2、优点:
降低组件之间的耦合度,实现软件各层之间的解耦。
可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。
容器提供单例模式支持(字典信息、权限信息、数据库连接,是否适合单例模式看对象有没有状态,有不同的状态不适合单例模式,dao中唯一状态时数据库连接)。
容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。(不理解)
容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。
Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。
3、IOC和AOP
-
IOC控制反转
-
控制了什么?谁控制谁?为什么是反转?
-
目的是什么?
-
-
理解:一般情况下需要我们自己创建依赖的对象,控制反转可以通过IOC容器来创建对象。目的是为了使得资源不受双方管理,而是交给第三方spring去集中管理(创建和维护),这样可以降低耦合度。(IOC容器就像淘宝)
-
AOP面向切面编程
-
目的是什么?
-
什么是切面?什么是切入点?
-
-
理解的例子:银行系统(取款、查询余额都要验证用户)
-
面向对象强调类和类的独立性,但增加了代码的重复性(比如两个类的某些方法相同,若此时将此方法写在另外一个类中供这两个类调用,违背了独立性)。这种时候需要代码可以动态的切到类的指定方法(AOP)。
-
切入面:切入到指定类指定方法的代码片段;
-
切入点:切入到哪些类哪些方法。
4、spring案例前配置文件
-
添加spring的配置文件,如spring-dao.xml、spring-service.xml等
-
实例化容器的方法,在容器中获取bean;
-
ApplicationContext context=new ClassPathXmlApplicationContext(spring.xml);
-
HelloDao helloDao=(HelloDao) context.getbean("hellloDaolmpl");
-
HelloService helloService=(HelloService) context.getbean("hellloSrrvicelmpl",HelloService.class);
-
-
Spring容器管理bean
-
bean属性id标识唯一 class类
-
scope作用域:singleton、prototype(多例)、request、session、globalSession;
-
Lazy-init:default=false
-
Scope="singleton" lazy-init="default"表示容器已经加载实例化对象;
-
Scope="singleton" lazy-init="true"表示容器已经加载,当使用到该对象的时候实例化该对象
-
5、spring注解
-
创建对象的操作一般使用配置文件方式实现;
-
注入属性的操作一般使用注解方式实现。
-
@Autowired
-
@Autowired目的:省略getter和setter,消除bean属性中的property;
-
用在javabean中的注解,默认通过byType形式,用来给指定的字段或方法注入所需的外部资源;
-
四种模式:
-
byName:根据属性名自动装配;
-
byType:根据属性类型
-
constructor:根据构造函数参数类型
-
-
-
@qualifier:当存在一个以上的匹配的bean时,用qualifier
-
@service("service")
-
目的:service 是有用的相当于 xml配置中得bean id = service ,也可以不指定, 不指定相当于 bean id = com. service.service 就是这个类的全限定名,表示给当前类命名一个别名,方便注入到其他需要用到的类中;不加的话,默认别名就是当前类名,但是首字母小写 .在autowired的基础上继续减少配置文件
-
-
@Service用于标注业务层组件,@Controller用于标注控制层组件(如struts中的action),@Repository用于标注数据访问组件,即DAO组件,而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。