概念
spring是一个轻量级的框架因为它不会依赖很多的东西,是一个管理bean类的容器,也是一个一站式框架(在三层架构中都提供了不同的解决技术:web层是提供了springmvc技术,service层提供了ioc的技术,持久层提供了jdbcTemplate)。
两大核心
IOC(控制反转)
原理:一开始创建对象的方式是通过new的方式,但是这样耦合度非常的高,如果要做修改对象操作的话,就会要改很多的地方繁琐还容易出错,工厂模式虽然可以改善,但是每次都要编译;但是用ioc的话就是通过把对象交给spring容器来管理,从而来达到不用写很多繁琐的代码降低耦合的目的。
bean的详解:bean标签的属性:id(自定义对象名),class(创建类对象的全路径),name,scope(bean的作用范围:singleton,是默认的单例模式,在spring容器中只存在一个;propotype是非单例模式,每次使用都会创建一个新的对象)。
注入方式:1、set注入(在实体类要写set方法)2、构造注入(在实体类要写构造方法);注入属性的类型可以是普通类型也可以是对象类型,还可以是复杂类型(list,map,properties)
用到的技术:xml,dom4j,工厂设计模式,反射(流程:在xml写一个文件,创建一个工厂,通过dom4j解析拿到id从而获取值也就是class,再拿值通过反射拿到对象并且返回)。
解决的问题:避免了繁琐的创建对象,降低了类之间的耦合度。
基于注解方式:在xml文件中添加配置<context:componenet-scan base-package="包的名称">开启注解扫描,然后在类上面加@Componenet(value="user")就是创建对象,value相当于是xml配置中的id。创建对象的四个注解:@Component,@controller(web层),@Service(业务层),@repository(持久层)都是用来创建对象。属性的注解:Autowired/Resource(name="对象名")
控制反转(IOC)和依赖注入(DI)的区别:控制反转把对象的创建交给spring进入配置,依赖注入是向类里面的属性设置值。关系:依赖注入不能单独存在,需要在控制反转的基础上完成操作。
整合web项目原理:在web文件创建一个监听器,当服务器启动的时候会自动加载spring的配置文件,并且创建对象,存放到servletContext域里面
AOP(面向切面编程)
原理:是一个切面编程,语法是根据Aspectj来的,作用是为了处理多个类相似的操作而不侵入类中,一个处理业务成为一个面,切面是对于业务而言。
通知:
1、前置通知@Before
2、后置通知@AfterReturning
3、异常通知@AfterThrowing
4、最终通知@After
5、环绕通知@Around(带有返回值,可以改变后置通知的返回值)。
spring优缺点:
优点:
1、非常优秀的轻量级,低侵入式的框架。
2、ioc的容器周期式的管理,降低组件的耦合。
3、对其他的容器有非常好的支持,像对持久层的hibernate,mybatis,TOP Link等。
缺点:
1、web层的mvc框架国语单薄,对页面框架的支持,跟其他框架还有很大的差距。
2、不是一站式解决方案。
3、使用反射来管理容器的bean,在程序中增大了内存和运行计算的时间。
4、部分组件功能还有待完善。
扩展:
当spring的配置文件没有提示的时候就把scheam约束的最后半句话拷贝,然后window->properties->catalog->add->key的位置就粘贴,然后上面就选择该约束的目录,还有一种方法就是先在xml文件里面把要用的标签的代码先写一遍,再写的时候就会有提示了(缓存)。
在两个java类里面,spring的依赖不可以相互注入