maven:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>5.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>5.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>5.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-expressionartifactId>
<version>5.0.0.RELEASEversion>
dependency>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<bean>
bean>
beans>
程序入口
public class test01 {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("bean-ioc.xml");
}
}
创建普通对象:
都是在创建对象,只是创建方式不一样
如果我要演示就会像视频那样变成几个小时
【1】类构造创建(直接用反射调用无参构造器):
<bean id="HelloService" class="ioc_01.HelloService">bean>
public class HelloWorld {
public HelloWorld(){
}
}
【2】类静态方法(调用类中factory-method为方法名的静态方法的的返回值作为对象):
bean>
【3】类依赖(调用容器中另外一个对象的factory-method为方法名的方法的返回值作为对象):
<bean id="d3" factory-bean="d2" factory-method="getTime">bean>=>
【4】有参构造创建(默认调用无参,指定后将根据你的参数列表调用构造器,index是参数列表的位置,如果参数
是值就是value,是容器的某个对象就用ref)
<bean>
<constructor-arg index="0" value="" >constructor-arg>
<constructor-arg index="1" ref="">constructor-arg>
bean>
创建文件对象:
<util:properties id="dbConfig" location="classpath:jdbc.properties" />
<bean id="jdbcConfig2" class="ioc_01.JdbcConfig">
<property name="username" value="#{dbConfig['jdbc.username']}">property>
<property name="password" value="#{dbConfig['jdbc.password']}">property>
bean>
<context:property-placeholder location="classpath:/jdbc.properties" />
<bean id="jdbcConfig" class="ioc_01.JdbcConfig">
<property name="password" value="${jdbc.password}">property>
<property name="username" value="${jdbc.password}">property>
bean>
文件对象演示:
(1)创建properties文件
这种文件类型的特点就是,轻松实现k-v,比如username对应GodSchool这种描述形式;
(2)创建引用该文件值的对象
public class JdbcConfig {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
(3)建立xml描述
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:properties id="dbConfig" location="classpath:jdbc.properties" />
<bean id="jdbcConfig2" class="ioc_01.JdbcConfig">
<property name="username" value="#{dbConfig['jdbc.username']}">property>
<property name="password" value="#{dbConfig['jdbc.password']}">property>
bean>
<context:property-placeholder location="classpath:/jdbc.properties" />
<bean id="jdbcConfig" class="ioc_01.JdbcConfig">
<property name="password" value="${jdbc.password}">property>
<property name="username" value="${jdbc.password}">property>
bean>
beans>
(4)测试
public class test01 {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("bean-ioc.xml");
JdbcConfig jdbcConfig = ac.getBean("jdbcConfig", JdbcConfig.class);
JdbcConfig jdbcConfig2 = ac.getBean("jdbcConfig2", JdbcConfig.class);
Properties properties = ac.getBean("dbConfig", Properties.class);
}
}
<bean id="" map中的key!
class="" 类实例包
scope="prototype/singleton" 多例-线程独立会创建多个、单例-多线程共享;默认单例
lazy-init="true/false" 懒加载模式,用到这个对时才创建
init-method="init" 初始化时调用的方法名
destroy-method="destory" 销毁时调用的方法名
>
bean>
【赋值基本数据类型】——如果你的属性是级别类型可以直接赋值
<bean class="com.tedu.cn.Entity.User">
<property name="username" value="luozhifeng">property>
<property name="password" value="123456">property>
bean>
【赋值简单数据结构】——如果你的属性是map或者list结构
<bean class="entity">
<property name="session">
<map>
<entry key="lzf" value="12341234">entry>
map>
property>
<property name="names">
<list>
<value>fuck1value>
<value>fuck2value>
<value>fuck3value>
<value>fuck4value>
list>
property>
bean>
【赋值文件对象属性】——如果你的属性是properties文件对象类型
<property name="properties">
<props>
……
<prop key="username">rootprop>
<prop key="password">1234prop>
props>
property>
【引用整个对象】
<bean class="com.tedu.cn.Entity.User">
<property name="Childrenlist" ref="Children">property>
bean>
【引用对象的值】——#作为运算符,拿到容器的某个对象后取他的值
<bean id="k2" class="Spring.Student">
<property name="name" value="#{k1.list[1]}">property>
bean>
autowire=“byName”:很显然,有的时候属性名就是id名,按照这个规范来就可以自动根据属性名作为id装配,不用手动写好关系;
autowire=“byType”:很显然,有的时候属性的类型在容器仅有一个,按照这个规范来就可以自动根据类型装配;
ID名匹配(规范id就是参数名)
public class HelloController {
private HelloService helloService;//用属性名作为id
……
}
<bean id="helloController" class="ioc_01.HelloController" autowire="byName">bean>
<bean id="helloService" class="ioc_01.HelloService">bean>//在这里一定要配成一致的
类型匹配(扫描整个项目文件)
<bean id="stu" class="Spring.Student" autowire="byType"/>
Ps:利用自动装配则无需要去手动建立bean注入的关联,只需要配置好各自的ID以及属性名的规范即可,此处不做过多的代码显示;避免影响笔记的间接性
很显然我们不希望一个个这样映射对象,直接给包名全部创建不是更改,必须加了特定注解+扫包才能将类的对象放在容器内,基于注解下一章演示;
<context:component-scan base-package="ioc_01">context:component-scan>
ioc_01个包名
后续Spring专题:
SpringIOC——注解管理全套
SpringIOC——内部工具全套
SpringIOC——核心源码剖析
GodSchool
致力于简洁的知识工程,输出高质量的知识产出,我们一起努力