SpringFramework教程
SpringFramework教学
简述:Spring Framework 为基于 Java 的现代企业应⽤程序提供了⼀个全⾯的编程和配置模型——在任何类型的部署平台上。
Spring 的⼀个关键元素是应⽤程序级别的基础设施⽀持:Spring 专注于企业应⽤程序的“管道”,因此团队可以专注于应⽤程序级别的业务逻辑,⽽⽆需与特定部署环境建⽴不必要的联系。
⼀、核⼼内容
Spring Framework有两个核⼼技术点IOC和AOP
IOC(控制反转):简单讲就会把对象提前创建好放在容器⾥,降低项⽬的耦合性可以对bean的创建和⽣命周期进⾏管理。
AOP(⾯向切⾯编程):使在不改变已编写好的代码情况下对原有的⽅法进⾏增强。
⼆、IOC
1.作⽤
在spring中IOC主要是对bean进⾏管理,管理bean⽣命周期和创建,降低代码的耦合性。
(在公司中代码写出来后要考虑后期维护所以耦合性挺重要的)
2.步骤
IOC的bean管理有两个步骤:
1.对象创建:
2.DI(依赖注⼊:也可以称为属性注⼊,是指对bean中的属性类型为类的属性进⾏赋值)
有时候也会有第3步初始化
3.实现⽅式
1. XML⽅式
1.1 基础
简介:XML⽅式就是通过编写⼀个.XML的⽂件来实现bean的管理,然后在代码中⽤Bean Factory类和Application Context类对.XML⽂件进⾏解析。(如果有兴趣也可以去了解其他类型的⽐如说Josn等)
步骤:
①创建⼀个spring项⽬(创建⼀个Maven项⽬然后引⼊Spring Framework的相关包就⾏)
直接点击next创建下⼀步输⼊好项⽬名后直接创建。
然后再l中加⼊标签引⼊jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xsi="/2001/XMLSchema-instance"
schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
spring ioc注解<modelVersion>4.0.0</modelVersion>
<groupId>com.zsjt</groupId>
<artifactId>SpringFramework</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<mavenpiler.source>8</mavenpiler.source>
<mavenpiler.target>8</mavenpiler.target>
</properties>
<!--需要引⼊的标签 start -->
<!--这⾥是引⼊jar包 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.16</version>
</dependency>
</dependencies>
<!-- stop -->
</project>
②创建⼀个实体类(在类中随便创建⼏个属性和相应的get,set⽅法)后⾯的属性注⼊是根据set⽅法进⾏的
public class Student {
private String name;
private int age;
private Student buddy;
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public void setStudent(Student student){
this.student = student;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public Student getStudent(){
return this.student;
}
}
③创建⼀个.XML⽂件(l)在resources⽬录下
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
<!-- 中间⽤来编写标签,从⽽实现某些功能 -->
</beans>
④编辑.XML⽂件
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
<!-- bean就是对象注⼊ -->
<!-- id不是你在代码中的创建出来对象的名称,他只是⼀个标识 -->
<bean id="student"class="com.zsjt.bean.Student">
<!-- property标签就是DI属性注⼊,这个标签使⽤的条件就是实体类有age属性的set⽅法 -->
<property name="age"value="21"></property>
</bean>
</beans>
在⾥有⼀个name属性他和id有⼀样的功能也也是标识,他们的区别是id不能有特殊字符⽽,name可以有特殊字符。(name原本是为了⼀个⽼版本类型的项⽬使⽤的⽐ssm⽼,有兴趣⾃⼰去⼀下忘记叫什么了)
如果想在value中使⽤特殊字符这样写
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
<!-- bean就是对象注⼊ -->
<!-- id不是你在代码中的创建出来对象的名称,他只是⼀个标识 -->
<bean id="student"class="com.zsjt.bean.Student">
<!-- property标签就是DI属性注⼊,这个标签使⽤的条件就是实体类有age属性的set⽅法 -->
<property name="age"value="21">
<value><![CDATA[value的值]]></value>
</property>
</bean>
</beans>
如果要注⼊集合,先创建⼀个集合属性,然后
<bean id="buddy"class="ity.Student">
<property name="name"value="mingwang"></property>
<property name="friendList">
<list>
<value>内容</value>
</list>
</property>
</bean>
如果List集合的内容是bean就将value改为ref
<bean id="buddy"class="ity.Student">
<property name="name"value="mingwang"></property>
<property name="friendList">
<list>
<ref bean='bean的对应标识'></ref>
<ref bean='bean的对应标识'></ref>
</list>
</property>
</bean>
Map
<bean id="buddy"class="ity.Student">
<property name="name"value="mingwang"></property>
<property name="friendMap">
<map>
<entry key=""value=""></entry>
<!-- 如果是存放的类型为对象就在key或value后⾯加上-ref -->
</map>
</property>
</bean>
Set
<bean id="buddy"class="ity.Student">
<property name="name"value="mingwang"></property>
<property name="friendSet">
<set>
<value></value>
<!-- 如果是对象就⽤下⾯这个标签 -->
<ref bean="bean标识"/>
</set>
</property>
</bean>
⑤在项⽬中创建解析.XML⽂件的对象(在test包下)
public class RunTest {
public static void main(String[] args){
//1.初始化spring容器。
ApplicationContext context =new ClassPathXmlApplicationContext("l");
//2.通过spring容器获取(context)bean,这⾥就⽤到了xml⾥⾯的id 所以说student只是标识不是对象名称。
Student wangMing =(Bean("student");
//3.通过wangMing对象来获取属性
System.out.println("xxx的年龄是"+ Age());
}
}
ApplicationContext对象也可以改为BeanFactory试试
他们的区别就是ApplicationContext在new后就创建了,⽽BeanFactory在⽤到他时也就是Bean(“student”);时创建。
1.2使⽤加强
①为对象中引⼊属性类型为类的属性引⼊属性值将value改为ref(也就是DI)
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
<!-- bean就是对象注⼊ -->
<!-- id不是你在代码中的创建出来对象的名称,他只是⼀个标识 -->
<bean id="student"class="com.zsjt.bean.Student">
<!-- property标签就是DI属性注⼊,这个标签使⽤的条件就是实体类有age属性的set⽅法 -->
<property name="age"value="21"></property>
<property name="buddy"ref="buddy"></property>
</bean>
<bean id="buddy"class="com.zsjt.bean.Student">
<property name="name"value="mingwang"></property>
</bean>
</beans>
或这样写不⽤ref直接在⾥⾯编写
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
<!-- bean就是对象注⼊ -->
<!-- id不是你在代码中的创建出来对象的名称,他只是⼀个标识 -->
<bean id="student"class="com.zsjt.bean.Student">
<!-- property标签就是DI属性注⼊,这个标签使⽤的条件就是实体类有age属性的set⽅法 -->
<property name="age"value="21"></property>
<property name="buddy">
<bean id="buddy"class="com.zsjt.bean.Student">
<property name="name"value="mingwang"></property>
</bean>
</property>
</bean>
</beans>
他们的区别想想局部变量和成员变量
public class RunTest {
public static void main(String[] args){
//1.初始化spring容器。
ApplicationContext context =new ClassPathXmlApplicationContext("l");
//2.通过spring容器获取(context)bean,这⾥就⽤到了xml⾥⾯的id 所以说student只是标识不是对象名称。
Student wangMing =(Bean("student");
//3.通过wangMing对象来获取属性
System.out.println("xxx的年龄是"+ Age());
System.out.println("butty"+ Buddy().getName());
}
}
②在这种⽅法中创建对象的⽅法默认是根据该对象的⽆参构造创建对象的,但我们也可以通过使⽤使他使⽤有参构造。
<bean id="buddy2"class="ity.Student">
<constructor-arg name="age"value="22"></constructor-arg>
<constructor-arg name="name"value="buddy2"></constructor-arg>
</bean>
③在bean中有⼀个autowire属性可以实现⾃动装载在这个属性中有byName和byType两个属性可以根据对象的标识名称和对象的类型进⾏⾃动装配。
注意:a.这⼀标签中的name是根据构造⽅法中的参数来的和顺序⽆关。
b.如果不⽤name属性就会根据顺序注⼊。
c.他会根据数量和种类使⽤对应的有参构造。
2.注解⽅式
创建⼀个Teacher类。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论