Spring学习
1.概述
Spring 是一个轻量级的 Java 开发框架,它是为了解决企业开发的复杂性而创建的,可以帮助开发人员创建对象管理对象之间的关系。
Spring 的核心是控制反转(IOC)和面向切面编程(AOP)。 可以实现模块之间、类之间的解耦合。
Spring是一个容器,容器中存放的是java对象,可以存放service,dao,工具类等,程序员需要做的是把对象放入到容器中。
2.控制反转
IOC (Inversion of control):
控制:把对象的创建、赋值、管理工作都交给容器来实现。
反转:容器代替开发人员创建赋值管理对象
底层使用的是反射机制
使用目的:解耦合,减少对代码的改动,实现功能。
3.举个栗子
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
告诉spring创建对象
声明bean,就是告诉spring创建某个类的对象
id:对象的自定义名称,唯一值,spring通过这个名称找到对象
class:类的全限定名称,不能是接口,因为spring是反射机制创建对象
一个bean标签声明一个对象
-->
<bean id="someService" class="com.bjpowernode.service.impl.SomeServiceImpl"/>
</beans>
<!--
spring的配置文件
1.beans:是跟标签,spring把java对象称为bean
2.spring-beans.xsd是约束文件
-->
测试类
@Test
public void test02() {
//使用spring容器创建对象
//1.指定spring配置文件的名称
String config = "beans.xml";
/**
* 2.创建spring容器的对象,ApplicationContext
* ApplicationContext就是表示spring容器,通过容器获取对象
* ClassPathXmlApplicationContext是ApplicationContext的实现类 表示从类路径中加载配置文件
*/
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
// 从容器中获取某个对象
// getBean("配置文件中的bean的id值")
SomeService service = (SomeService) ac.getBean("someService");
// 调用该对象的方法
service.domeSome();
}
Spring创建对象的时间是在创建spring’容器的时候,会创建spring容器中的所有对象。
Spring提供的方法
@Test
public void test03(){
String config = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//Spring提供的方法,获取容器中定义的对象的数量
int cout = ac.getBeanDefinitionCount();
System.out.println(cout);
//Spring提供的方法,获取容器中对象的名字
String[] names = ac.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
Spring能创建一个非自定义的对象(Java提供的对象)
// 获取一个非自定义类的对象 比如Date类
@Test
public void test04(){
String config = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
Date myDate = (Date) ac.getBean("myDate");
System.out.println(myDate);
}
4.依赖注入
DI(dependency Injection)是ioc技术的实现,叫做依赖注入,只需在程序中提供使用对象的名称就可以创建对象给属性赋值。
注入:就是赋值的意思
DI的实现
1.在Spring的配置文件中,使用标签和属性完成叫做基于xml的DI实现
2.使用spring中的注解,完成属性赋值,叫做基于注解的di实现。
DI的语法分类
1.set注入(设值注入)
spring调用类的set方法,在set方法中实现属性的赋值
简单类型:spring中规定java的基本数据类型和string都是简单类型
1.简单类型的set注入
<bean id="student" class="com.bjpowernode.ba01.Student">
<property name="name" value="zhangsan"/>
<property name="age" value="18"/>
</bean>
2.引用类型的set注入:
-->
<bean id="student1" class="com.bjpowernode.ba02.Student">
<property name="name" value="zhangsan"/>
<property name="age" value="18"/>
<!--引用类型赋值 使用ref-->
<property name="school" ref="school"/>
</bean>
<bean id="school" class="com.bjpowernode.ba02.School">
<property name="name" value="动力节点"/>
<property name="address" value="郑州屎"/>
</bean>
2.构造注入
spring调用类的有参构造方法,在创建对象的同时,在构造方法中完成属性赋值。
构造注入使用
标签属性:
name:表示构造方法的形参名
index:表示构造方法的参数的位置,形式参数从左往右位置是 0 1 2 的顺序
<!--使用name属性实现构造注入-->
<bean id="myStudent" class="com.bjpowernode.ba03.Student" >
<constructor-arg name="myage" value="20" />
<constructor-arg name="mySchool" ref="myXueXiao" />
<constructor-arg name="myname" value="周良"/>
</bean>
<!--使用index属性-->
<bean id="myStudent2" class="com.bjpowernode.ba03.Student">
<constructor-arg index="1" value="22" />
<constructor-arg index="0" value="李四" />
<constructor-arg index="2" ref="myXueXiao" />
</bean>
<!--省略index-->
<bean id="myStudent3" class="com.bjpowernode.ba03.Student">
<constructor-arg value="张强强" />
<constructor-arg value="22" />
<constructor-arg ref="myXueXiao" />
</bean>
标签:容器,ac,ApplicationContext,对象,Spring,笔记,学习,spring
From: https://www.cnblogs.com/hellohui/p/16631541.html