Spring框架
学什么: IOC(控制反转) DI(依赖注入) AOP(面向切面编程){事物处理}
Spring是? 作用? 入门案例 注解开发
是:多个框架技术的统称,每个具体的技术都可以完成不同的功能
作用:1.可以简化代码开发;
2.可以将代码中创建对象的行为进行控制反转,从而解决代码的耦合度;
3.可以自动管理对象与对象之间的依赖关系;(对于对象来说,就是依赖注入)
SpringFramework框架是:其他功能的基础;使用的回收需要导入Spring-context的坐标,并创建IOC容器;
核心容器IOC: 中文名叫控制反转,就是程序中所有创建对象的行为,不能再使用关键字new创建对象了,
统一交给Spring的ioc容器负责创建对象并保存对象,当我们的程序中需要使用到具体某个对象的时候,
直接ioc容器中获取对象即可;(ioc容器相当于是一个map集合)
入门案例: 1.导入Spring-context的坐标;
2.编写Spring的核心配置文件,并指定哪些类需要交给Spring管理;
3.编写测试的接口和具体的实现类;
4.编写测试类,从ioc容器中获取对象并使用;
四、 DI中文意思是:依赖注入,就是当某个对象的成员变量位置,需要其他的对象或数据的时候,可以让Spring自动的给
这个成员变量注入值;
如果是:简单类型,使用value;
如果是:自定义引用数据类型,使用ref,ref的值是和Spring管理的某个bean的id一致;
有关配置文件的配置介绍:
bean的name属性:可以给同一个对象,起多个名字,以便于通过多种方式获取该对象;
bean的scope:可以控制该对象是单列还是非单列的
scope="prototype"原型,非单利的,每创建一个对象开辟一个空间
scope="singleton"单列,spring默认的是单利的
自动装配意思:告诉spring,某个类中的成员变量,让spring自动把值注入进去;
代码实现:直接在bean的标签中添加一个:autowire="byType"属性即可;
要求被装配的bean必须唯一 !
依赖自动装配特征:1.自动装配用于:引用类型依赖注入,不能对简单类型进行操作
2.使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
3.使用按名称装配时(byName)必须保障容器中具有指定名称的bean,
因变量名与配置耦合,不推荐使用
4.自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
spring给成员变量注入集合和数组类型的数据:
框架整合:MyBatis Mybatis-plus SpringMVC .....
五、 第三方资源配置管理:
管理第三方bean-Druid:1.导入Druid的连接池坐标;
2.在pring的核心配置文件中,配置bean;
3.给bean中的4个成员变量注入值;
4.在测试类中通过ioc容器获取bean对象即可;
1.管理DataSource连接池对象:
2.加载properties属性文件【重点】 jdbc.properties:符号前面的吗名字相当于是map的key,可以自定义,符号后面的数据,是属于连接数据库时需要的信息,不能乱码
使用spring加载properties配置文件:1.在spring的核心配置文件中开启(context)命名空间
2.在核心配置文件中,指定properties文件的路径
3.在bean标签中,所有使用value注入值的地方,都可以通过${配置文件中的key}
获取对应的值
4.获取ioc,测试 ;
【第一步】编写jdbc.properties属性文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db jdbc.username=root jdbc.password=root
小技巧:如果觉得上述复制粘贴方式不好改或者容易改错,其实idea是有提示功
能的,注意不要选错就行了。
有些版本的idea没有这个提示,那么就按照上面复制粘贴的方式改,
改完之后可以做成live template模板,后期直接用。
【第二步】在applicationContext.xml中开启开启context命名空间,
加载dbc.properties属性文件
【第三步】在配置连接池Bean的地方使用EL表达式获取jdbc.properties属性文件
中的值
注意事项:配置不加载系统属性
问题:如果属性问价你中配置的不是jdbc.username,
而是username=root666,那么使用${username}获取到的
不是root66,而是计算机的名称。
原因:系统属性的优先级比我们属性文件中的高,
替换了我们的username=root666。
解决1:换一个名称 ,例如不叫username,叫jdbc.username。
解决2:使用system-properties-mode="NEVER"属性表示不使用系统属性
加载 properties文件写法标准格式:
spring半注解开发:1.在核心配置文件中,开启注解扫描的功能
2.在指定的包的类中添加注解:@Controller @service @Repository
3.如果涉及到简单类型的数据,可以直接使用@Value("注入的值")
4.如果涉及到引用数据类型的数据,可以直接使用@Autowired按类型自动注入;
@Component:用于表现层bean定义
@service:用于业务层bean定义
@Repository:用于数据层bean定义
spring的纯注解开发:
不需要编写spring的核心配置文件, 直接通过一个配置类,替代核心配置文件文件即可;
1.自定义一个核心配置类,替代核心配置文件;
2.在指定的包中定义的类的上面添加指定的注解
3.在测试类中获取ioc容器的时候,使用的是AnnotationConfigApplicationContext即可;
注解管理单列@Scope("prototype")
生命周期 :
@PostConstruct 创建对象的时候,会执行带有这个注解的方法
@PreDestroy 销毁对象的时候,会执行带有这个注解的方法
注解加载properties配置文件和依赖注入
简单类型使用 @Value(数据值) @Value(${配置文件中的key})
自定义类型 @Autowired 如果类型不唯一,可以指定按名称装配 @Qualifier("abc")// 明确的指定按名称注入,这里面的名称必须和dao中配置的名称一致
在配置类的上面通过@PropertySource({"classpath:jdbc.properties"})可以加载配置文件