Spring学习
Spring是一站式轻量级的开源框架
一站式:框架很“全面”且整合度高
(1)Spring在javaee三层结构中,每一层都提供不同的解决方案
web层:SpringMVC
service层:IOC
dao层:JdbcTemplate
轻量级:该框架不需要依赖其他东西就可以直接使用
开源:免费提供源代码
Spring的两大核心部分即IOC和AOP
IOC:控制反转,降低耦合性,对象的创建不是通过new,而是都交给了Spring的xml配置文件(src下)
AOP:面向切面,程序扩展功能不是通过修改源代码来实现的
(一)IOC
(1)IOC操作两部分:①IOC的配置文件 ②IOC的注释方式
①IOC配置文件方式:
(1)IOC底层原理:
①创建xml的配置文件,配置要创建的对象类
<bean id="" class=""></bean>
②创建工厂类,使用dom4j解析xml配置文件+反射技术
▲ 使用dom4j解析xml文件,通过id值,得到id值对应的class属性值
▲ 通过反射创建该属性值的对象,然后通过方法返回该对象即可
IOC的实现:用反射机制加上工厂及其配置文件来完成的
(2)bean标签的常用属性
①id:起名称,id的属性值不能包含特殊符号($,&,#,_等)
②class:创建对象所在的类的路径
③name:功能和id的一样,但是区别是id的属性值不能包含特殊符号($,&,#,_等)而name的属性值可以包含
④scope:设置bean的作用范围
singleton:创建对象时是单例(默认)
prototype:创建对象时是多实例的
♥ (3)注入属性(常用set方法注入)
最重点的是注入对象类型属性,所以仅介绍此类型的属性注入:
▲在要被注入的类中设置该对象属性的set方法
▲创建配置文件,引入schema约束
<bean id="" class="">
<!-- ref:要注入的对象那个类型创建时的id值-->
<property name="" ref=""></property> (此处注意:要是注入一般类型,ref就是value <property name="" value="">)
</bean>
(4)IOC和DI区别:
IOC:控制反转,把对象的创建交给spring的配置文件处理
DI:依赖注入,相类里面的属性设置属性值
两者关系:依赖注入不能单独存在,需要在IOC的基础之上完成操作
②IOC的注解方式
(1)注解:代码中一些特殊的标记,使用标记可完成功能
注解写法:@注解名称(value=属性值)
注解使用:方法上,类上面,属性上面
注解可创建对象,可注入属性
(2)使用注解准备:
▲导入注解要用的jar包:spring-aop-4.2.4-RELEASE.jar
▲创建类,创建方法
▲创建xml配置文件,引入schema约束,此时约束有beans和context
▲用了注解就不用在配置文件中配置<bean>标签创建对象了,只需要开启注解扫描即可
<context:component-scan base-package=" "></context:component-scan>
base-package:com/com.spring/com.spring.User(这里的包名是自己建的)
(3)是用注解创建对象:
在要创建对象的类上面使用注解即可创建对象
例:@Component(value="user")
spring中提供了三个@Component的衍生注解,目前这四个注解的功能是一样的
@Controller(value="user"):WEB层
@Service(value="user"):业务层
@Pesponsitory(value="user"):持久层
补充:@Scope(value="prototype/singleton") 对象多实例还是单实例
(4)用注解注入属性:(使用注解不需要set方法)
@Autowired :自动注入
@Resource(name=""):name指要注入的对象名称
在要注入的属性上面用:
例如:
@Autowired
private UserDao userDao;
(@AutoWired会根据下面的属性类型去类里面找实例化好的对象),例:去UserDao类里去找创建好的对象
@Resource(name="userDao")
private UserDao userDao;
(@Resource(name="") 会去UserDao类里根据name去找该对象)
IOC总结:一般对象的创建用配置文件配置,注入属性用注解的方法
(二)AOP