wei_shuo的个人主页
wei_shuo的学习社区
Hello World !
文章目录
- ☢Spring框架
- ☢Spring架构图
- 组件介绍:
- 核心容器(IOC)
- 面向切面编程模块(AOP)
- 数据访问模块(Data Access/Integration)
- Web模块(Web)
- 单元测试模块(Test)
- 思维转变(传统开发—>IOC容器)
- ☢Spring IOC/DI
- 第一个Spring程序
- Spring配置说明
- import
- IOC创建对象方式
- DI依赖注入
- 完整注入信息
- Bean作用域
- Bean自动装配(Autowire)
- Spring框架xml配置中属性 ref 与 value的区别
☢Spring框架
Spring框架是由于<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“> <bean id=“hello“ class=“com.wei.pojo.Hello“> <property name=“name“ value=“Spring“/> </bean></beans>
- 编写测试类
import com.wei.pojo.Hello;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest { public static void main(String[] args) { //解析beans.xml文件,生成管理相应的Bean对象 ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); //getBean:参数即为Spring配置文件中的bean的id Hello hello = (Hello) context.getBean("hello"); //强制类型转换 hello.show(); }}
总结:
- bean就是Java对象,由Spring创建和管理
<bean id="hello" class="com.wei.pojo.Hello"> <property name="name" value="Spring"/> </bean>
- 解析beans.xml文件,生成管理相应的Bean对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
- getBean:参数即为Spring配置文件中的bean的id
Hello hello = (Hello) context.getBean("hello"); //强制类型转换
Spring配置说明
- id:bean的唯一标识符,也就是相当于对象名
- class:bean对象所对应的全限定名:包名.类型
- name:别名
<bean id="hello" class="com.wei.pojo.Hello"> <property name="name" value="Spring"/> </bean>
import
- import,一般用于团队开发中,可以将多个配置文件导入合并为一个
- 将所有xml文件导入到applicationContext.xml中,方法如下
<import resource="beans1.xml"/><import resource="beans2.xml"/><import resource="beans3.xml"/>
IOC创建对象方式
无参构造(
默认
)
- 默认使用无参构造创建对象
public User(){ System.out.println("User的无参构造"); }
<bean id="user" class="com.wei.pojo.User"><property name="name" value="秦疆"/>--> </bean>
带参构造
- 第一种方法:下标赋值
public User(String name){ this.name=name; }
<bean id="user" class="com.wei.pojo.User"> <constructor-arg index="0" value="wei_shuo"/> </bean>
- 第二种方法:类型创建
public User(String name){ this.name=name; }
<bean id="user" class="com.wei.pojo.User"> <constructor-arg type="java.lang.String" value="秦疆"/> </bean>
- 第三种方法:参数名称
public User(String name){ this.name=name; }
<bean id="user" class="com.wei.pojo.User"> <constructor-arg name="name" value="秦疆"/> </bean>
DI依赖注入
依赖:bean对象的创建依赖于容器
注入:bean对象中的所有属性,容器注入
构造器注入
即无参构造/带参构造注入
Set注入
//复杂类型public class Address { private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Address{" + "address='" + address + '\'' + '}'; }}
//真实测试对象public class Student { private String name; private Address address; private String[] books; private List<String> hobbys; private Map<String,String> card; private Set<String> game; private String wife; private Properties info; //以及set/get方法 toString实现方法 此处省略}
<bean id="student" class="com.wei.pojo.Student"> <property name="name" value="秦疆"/> </bean>
完整注入信息
- Studnet类
public class Student { private String name; private Address address; private String[] books; private List<String> hobbys; private Map<String,String> card; private Set<String> game; private String wife; private Properties info; //以及set/get方法 toString实现方法 此处省略}
- Address类
private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Address{" + "address='" + address + '\'' + '}'; }
- beans.xml配置
<bean id="address" class="com.wei.pojo.Address"> <property name="address" value="武汉"/> </bean> <bean id="student" class="com.wei.pojo.Student"> <property name="name" value="秦疆"/> <property name="address" ref="address"/> <property name="books"> <array> <value>红楼梦</value> <value>西游记</value> <value>水浒传</value> <value>三国演义</value> </array> </property> <property name="hobbys"> <list> <value>听音乐</value> <value>看电影</value> <value>听书</value> </list> </property> <property name="card"> <map> <entry key="学生编号" value="123"/> <entry key="书籍编号" value="456"/> </map> </property> <property name="game"> <set> <value>英雄联盟</value> <value>Apex</value> </set> </property> <property name="wife"> <null/> </property> <property name="info"> <props> <prop key="学号">2000</prop> <prop key="性别">男</prop> <prop key="姓名">小明</prop> </props> </property> </bean>
- 测试类
public class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); Student student = (Student) context.getBean("student"); System.out.println(student.toString()); }}/*输出结果:Student{name='秦疆', address=Address{address='武汉'}, books=[红楼梦, 西游记, 水浒传, 三国演义], hobbys=[听音乐, 看电影, 听书], card={学生编号=123, 书籍编号=456}, game=[英雄联盟, Apex], wife='null', info={学号=2000, 性别=男, 姓名=小明}}*/
Bean作用域
- singleton 单实例(
单例
)(默认) —-全局有且仅有一个实例<bean id="user2" class="com.wei.pojo.User" c:name="wei_shuo" c:age="18" scope="singleton"/>
- prototype 多实例(
多例
) —- 每次获取Bean的时候会有一个新的实例<bean id="user2" class="com.wei.pojo.User" c:name="wei_shuo" c:age="18" scope="prototype"/>
以下在web开发中使用
- request
- session
- application
- websocket
Bean自动装配(Autowire)
自动装配是Spring满足bean依赖的方式,Spring会在上下文中自动寻找,自动给bean装配属性
- xml中显示装配
- Java中显示配置
- 隐式自动装配bean
案例实现:
- 一个人(people)有两个宠物(dog/cat)
- 狗实现方法wang
- 猫实现方法mioa
- Dog类
public class Dog { public void shout(){ System.out.println("wang"); }}
- Cat类
public class Cat { public void shout(){ System.out.println("miao"); }}
- people类
public class People { private Cat cat; private Dog dog; private String name; /* get/set方法 toString方法 需要写,笔者为了不影响文章美观此处省略…… */ }
- beans.xml
- byName:会自动在容器上下文中查找,和自己对象set方法后面的值(dog/cat)对应的beanid,如果beanid满足则自动装配
- byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean,如果类型全局唯一满足则自动装配
<bean id="cat" class="com.wei.pojo.Cat"/> <bean id="dog" class="com.wei.pojo.Dog"/> <bean id="people" class="com.wei.pojo.People" autowire="byName"><!-- autowire="byType 根据对象属性类型自动装配--> <property name="name" value="wei_shuo"/> <!----><!----> </bean>
Spring框架xml配置中属性 ref 与 value的区别
- 属性 ref :对象引用类型,代表引用这个对象
- 属性 value:字符串引用类型,代表引入的这个对象名字的字符串
结语:创作不易,如果觉得博主的文章赏心悦目,还请——
点赞
收藏
⭐️评论
冲冲冲