spring入门
< ! -- 老韩解读1. 配置monster对象/ javabean2. 在beans中可以配置多个bean3. bean表示就是一个java对象4. class 属性是用于指定类的全路径-> spring底层使用反射创建5. id属性表示该java对象在spring容器中的id, 通过id可以获取到对象6. < property name= "monsterId" value= "100" > 用于给该对象的属性赋值-- > < bean class = "com.hspedu.spring.bean.Monster" id= "monster01" > < property name= "monsterId" value= "100" / > < property name= "name" value= "牛魔王" / > < property name= "skill" value= "芭蕉扇" / > < / bean> < bean class = "com.hspedu.spring.bean.Monster" id= "monster02" > < property name= "monsterId" value= "1001" / > < property name= "name" value= "牛魔王~" / > < property name= "skill" value= "芭蕉扇~" / > < / bean>
package com. hspedu. spring. bean ;
public class Monster { private Integer monsterId; private String name; private String skill; public Monster ( Integer monsterId, String name, String skill) { this . monsterId = monsterId; this . name = name; this . skill = skill; } public Monster ( ) { } public Integer getMonsterId ( ) { return monsterId; } public void setMonsterId ( Integer monsterId) { this . monsterId = monsterId; } public String getName ( ) { return name; } public void setName ( String name) { this . name = name; } public String getSkill ( ) { return skill; } public void setSkill ( String skill) { this . skill = skill; } @Override public String toString ( ) { return "Monster{" + "monsterId=" + monsterId + ", name='" + name + '\'' + ", skill='" + skill + '\'' + '}' ; } }
@Test public void getMonster ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; Monster monster01 = ( Monster ) ioc. getBean ( "monster01" ) ; System . out. println ( "monster01=" + monster01 + " 运行类型=" + monster01. getClass ( ) ) ; System . out. println ( "monster01=" + monster01 + "属性name=" + monster01. getName ( ) + " monserid=" + monster01. getMonsterId ( ) ) ; Monster monster011 = ioc. getBean ( "monster01" , Monster . class ) ; System . out. println ( "monster011=" + monster011) ; System . out. println ( "monster011.name=" + monster011. getName ( ) ) ; System . out. println ( "================================" ) ; String [ ] beanDefinitionNames = ioc. getBeanDefinitionNames ( ) ; for ( String beanDefinitionName : beanDefinitionNames) { System . out. println ( "beanDefinitionName=" + beanDefinitionName) ; } System . out. println ( "================================" ) ; System . out. println ( "ok~~~" ) ; }
@Test public void getMonster ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; Monster monster01 = ( Monster ) ioc. getBean ( "monster01" ) ; System . out. println ( "monster01=" + monster01 + " 运行类型=" + monster01. getClass ( ) ) ; System . out. println ( "monster01=" + monster01 + "属性name=" + monster01. getName ( ) + " monserid=" + monster01. getMonsterId ( ) ) ; Monster monster011 = ioc. getBean ( "monster01" , Monster . class ) ; System . out. println ( "monster011=" + monster011) ; System . out. println ( "monster011.name=" + monster011. getName ( ) ) ; System . out. println ( "================================" ) ; String [ ] beanDefinitionNames = ioc. getBeanDefinitionNames ( ) ; for ( String beanDefinitionName : beanDefinitionNames) { System . out. println ( "beanDefinitionName=" + beanDefinitionName) ; } System . out. println ( "================================" ) ; System . out. println ( "ok~~~" ) ; }
配置bean对象
< ! -- 配置Monster , 通过类型来获取-- > < bean class = "com.hspedu.spring.bean.Monster" > < ! -- 老韩解读1. 当我们给某个bean对象设置属性的时候2. 底层是使用对应的setter方法完成的, 比如setName ( ) 3. 如果没有这个方法,就会报错-- > < property name= "monsterId" value= "100" / > < property name= "name" value= "牛魔王" / > < property name= "skill" value= "芭蕉扇" / > < / bean> < ! -- < bean class = "com.hspedu.spring.bean.Monster" > -- > < ! -- < property name= "monsterId" value= "200" / > -- > < ! -- < property name= "name" value= "牛魔王~" / > -- > < ! -- < property name= "skill" value= "芭蕉扇~" / > -- > < ! -- < / bean> -- >
@Test public void getBeanByType ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; Monster bean = ioc. getBean ( Monster . class ) ; System . out. println ( "bean=" + bean) ; }
指定构造器配置
< ! -- 配置Monster 对象,并且指定构造器老师解读1. constructor- arg标签可以指定使用构造器的参数2. index表示构造器的第几个参数 从0 开始计算的3. 除了可以通过index 还可以通过 name / type 来指定参数方式4. 解除大家的疑惑, 类的构造器,不能有完全相同类型和顺序的构造器,所以可以通过type来指定-- > < bean id= "monster03" class = "com.hspedu.spring.bean.Monster" > < constructor- arg value= "200" index= "0" / > < constructor- arg value= "白骨精" index= "1" / > < constructor- arg value= "吸人血" index= "2" / > < / bean> < bean id= "monster04" class = "com.hspedu.spring.bean.Monster" > < constructor- arg value= "200" name= "monsterId" / > < constructor- arg value= "白骨精" name= "name" / > < constructor- arg value= "吸人血" name= "skill" / > < / bean> < bean id= "monster05" class = "com.hspedu.spring.bean.Monster" > < constructor- arg value= "300" type= "java.lang.Integer" / > < constructor- arg value= "白骨精~" type= "java.lang.String" / > < constructor- arg value= "吸人血~" type= "java.lang.String" / > < / bean>
@Test public void setBeanByConstructor ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; Monster monster03 = ioc. getBean ( "monster03" , Monster . class ) ; System . out. println ( "monster03=" + monster03) ; }
通过p来配置对象
< ! -- 通过p名称空间来配置bean老韩解读1. 将光标放在p , 输入alt+ enter , 就会自动的添加xmlns2. 有时需要多来几次-- > < bean id= "monster06" class = "com.hspedu.spring.bean.Monster" p: monsterId= "500" p: name= "红孩儿" p: skill= "吐火" / >
给数组对象赋值配置
package com. hspedu. spring. bean ; import java. util. * ;
public class Master { private String name; private List < Monster > monsterList; private Map < String , Monster > monsterMap; private Set < Monster > monsterSet; private String [ ] monsterName; private Properties pros; public String getName ( ) { return name; } public void setName ( String name) { this . name = name; } public List < Monster > getMonsterList ( ) { return monsterList; } public void setMonsterList ( List < Monster > monsterList) { this . monsterList = monsterList; } public Map < String , Monster > getMonsterMap ( ) { return monsterMap; } public void setMonsterMap ( Map < String , Monster > monsterMap) { this . monsterMap = monsterMap; } public Set < Monster > getMonsterSet ( ) { return monsterSet; } public void setMonsterSet ( Set < Monster > monsterSet) { this . monsterSet = monsterSet; } public String [ ] getMonsterName ( ) { return monsterName; } public void setMonsterName ( String [ ] monsterName) { this . monsterName = monsterName; } public Properties getPros ( ) { return pros; } public void setPros ( Properties pros) { this . pros = pros; } @Override public String toString ( ) { return "Master{" + "name='" + name + '\'' + ", monsterList=" + monsterList + ", monsterMap=" + monsterMap + ", monsterSet=" + monsterSet + ", monsterName=" + Arrays . toString ( monsterName) + ", pros=" + pros + '}' ; }
}
< / bean> < bean class = "com.hspedu.spring.bean.Master" id= "master" > < property name= "name" value= "太上老君" / > < property name= "monsterList" > < list> < ref bean= "monster01" / > < ref bean= "monster02" / > < bean class = "com.hspedu.spring.bean.Monster" > < property name= "name" value= "老鼠精" / > < property name= "monsterId" value= "100" / > < property name= "skill" value= "吃粮食" / > < / bean> < / list> < / property> < property name= "monsterMap" > < map> < entry> < key> < value> monster< / value> < / key> < ref bean= "monster03" / > < / entry> < entry> < key> < value> monster4< / value> < / key> < ref bean= "monster04" / > < / entry> < / map> < / property> < property name= "monsterSet" > < set> < ref bean= "monster05" / > < ref bean= "monster06" / > < bean class = "com.hspedu.spring.bean.Monster" > < property name= "name" value= "金角大王" / > < property name= "skill" value= "吐水" / > < property name= "monsterId" value= "666" / > < / bean> < / set> < / property> < property name= "monsterName" > < array> < value> 小妖怪< / value> < value> 小妖怪< / value> < value> 小妖怪< / value> < / array> < / property> < property name= "pros" > < props> < prop key= "username" > root< / prop> < prop key= "password" > 123456 < / prop> < prop key= "id" > 127.0 .1 < / prop> < / props> < / property>
@Test public void setBeanByRef ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; MemberServiceImpl memberService = ioc. getBean ( "memberService" , MemberServiceImpl . class ) ; memberService. add ( ) ; }
master= Master { name= '太上老君' , monsterList= [ Monster { monsterId= 100 , name= '牛魔王' , skill= '芭蕉扇' } , Monster { monsterId= 1001 , name= '牛魔王~' , skill= '芭蕉扇~' } , Monster { monsterId= 100 , name= '老鼠精' , skill= '吃粮食' } ] , monsterMap= { monster= Monster { monsterId= 200 , name= '白骨精' , skill= '吸人血' } , monster4= Monster { monsterId= 200 , name= '白骨精' , skill= '吸人血' } } , monsterSet= [ Monster { monsterId= 300 , name= '白骨精~' , skill= '吸人血~' } , Monster { monsterId= 500 , name= '红孩儿' , skill= '吐火' } , Monster { monsterId= 666 , name= '金角大王' , skill= '吐水' } ] , monsterName= [ 小妖怪, 小妖怪, 小妖怪] , pros= { password= 123456 , username= root, id= 127.0 .1 } } Process finished with exit code 0
通过ref配置对象
< bean class = "com.hspedu.spring.dao.MemberDAOImpl" id= "memberDAO" / > < bean class = "com.hspedu.spring.service.MemberServiceImpl" id= "memberService" > < property name= "memberDAO" ref= "memberDAO" / > < / bean>
package com. hspedu. spring. dao ;
public class MemberDAOImpl { public MemberDAOImpl ( ) { } public void add ( ) { System . out. println ( "MemberDAOImpl add()方法被执行" ) ; }
}
package com. hspedu. spring. service ; import com. hspedu. spring. dao. MemberDAOImpl ;
public class MemberServiceImpl { private MemberDAOImpl memberDAO; public MemberServiceImpl ( ) { } public MemberDAOImpl getMemberDAO ( ) { return memberDAO; } public void setMemberDAO ( MemberDAOImpl memberDAO) { this . memberDAO = memberDAO; } public void add ( ) { System . out. println ( "MemberServiceImpl add() 被调用.." ) ; memberDAO. add ( ) ; }
}
通过内部类配置
< / bean> < bean class = "com.hspedu.spring.service.MemberServiceImpl" id= "memberService2" > < property name= "memberDAO" > < bean class = "com.hspedu.spring.dao.MemberDAOImpl" / > < / property> < / bean>
读取数组
package com. hspedu. spring. bean ; import java. util. List ;
public class BookStore { private List < String > bookList; public BookStore ( ) { } public List < String > getBookList ( ) { return bookList; } public void setBookList ( List < String > bookList) { this . bookList = bookList; } @Override public String toString ( ) { return "BookStore{" + "bookList=" + bookList + '}' ; }
}
< util: list id= "mybooklist" > < value> 三国演义< / value> < value> 红楼梦< / value> < value> 西游记< / value> < value> 水浒传< / value> < / util: list> < bean class = "com.hspedu.spring.bean.BookStore" id= "bookStore" > < property name= "bookList" ref= "mybooklist" / >
级联赋值
@Test public void setBeanByRelation ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; Emp emp = ioc. getBean ( "emp" , Emp . class ) ; System . out. println ( "emp=" + emp) ; }
< / bean> < bean class = "com.hspedu.spring.bean.Dept" id= "dept" / > < bean class = "com.hspedu.spring.bean.Emp" id= "emp" > < property name= "name" value= "jack" / > < property name= "dept" ref= "dept" / > < property name= "dept.name" value= "java" / > < / bean>
package com. hspedu. spring. bean ;
public class Dept { private String name; public Dept ( ) { } public String getName ( ) { return name; } public void setName ( String name) { this . name = name; } @Override public String toString ( ) { return "Dept{" + "name='" + name + '\'' + '}' ; }
}
package com. hspedu. spring. bean ;
public class Emp { private String name; private Dept dept; public Emp ( ) { } public String getName ( ) { return name; } public void setName ( String name) { this . name = name; } public Dept getDept ( ) { return dept; } public void setDept ( Dept dept) { this . dept = dept; } @Override public String toString ( ) { return "Emp{" + "name='" + name + '\'' + ", dept=" + dept + '}' ; }
}
通过工厂获得类
@Test public void getBeanByStaticFactory ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; Monster my_monster01 = ioc. getBean ( "my_monster01" , Monster . class ) ; Monster my_monster04 = ioc. getBean ( "my_monster04" , Monster . class ) ; System . out. println ( "my_monster01=" + my_monster01) ; System . out. println ( my_monster01 == my_monster04) ; }
< bean id= "my_monster05" class = "com.hspedu.spring.factory.MyFactoryBean" > < property name= "key" value= "monster04" / > < / bean> < bean class = "com.hspedu.spring.factory.MyInstanceFactory" id= "myInstanceFactory" / > < bean class = "com.hspedu.spring.factory.MyInstanceFactory" id= "myInstanceFactory2" / > < bean id= "my_monster02" factory- bean= "myInstanceFactory" factory- method= "getMonster" > < constructor- arg value= "monster03" / > < / bean> < bean id= "my_monster03" factory- bean= "myInstanceFactory2" factory- method= "getMonster" > < constructor- arg value= "monster03" / > < / bean> < bean id= "my_monster04" class = "com.hspedu.spring.factory.MyStaticFactory" factory- method= "getMonster" > < constructor- arg value= "monster02" / > < / bean> < bean id= "my_monster01" class = "com.hspedu.spring.factory.MyStaticFactory" factory- method= "getMonster" > < constructor- arg value= "monster02" / >
package com. hspedu. spring. factory ; import com. hspedu. spring. bean. Monster ;
import org. springframework. beans. factory. FactoryBean ; import java. util. HashMap ;
import java. util. Map ;
public class MyFactoryBean implements FactoryBean < Monster > { private String key; private Map < String , Monster > monster_map; { monster_map = new HashMap < > ( ) ; monster_map. put ( "monster03" , new Monster ( 300 , "牛魔王~" , "芭蕉扇~" ) ) ; monster_map. put ( "monster04" , new Monster ( 400 , "狐狸精~" , "美人计~" ) ) ; } public void setKey ( String key) { this . key = key; } @Override public Monster getObject ( ) throws Exception { return monster_map. get ( key) ; } @Override public Class < ? > getObjectType ( ) { return Monster . class ; } @Override public boolean isSingleton ( ) { return false ; }
}
package com. hspedu. spring. factory ; import com. hspedu. spring. bean. Monster ; import java. util. HashMap ;
import java. util. Map ;
public class MyInstanceFactory { private Map < String , Monster > monster_map; { monster_map = new HashMap < > ( ) ; monster_map. put ( "monster03" , new Monster ( 300 , "牛魔王~" , "芭蕉扇~" ) ) ; monster_map. put ( "monster04" , new Monster ( 400 , "狐狸精~" , "美人计~" ) ) ; } public Monster getMonster ( String key) { return monster_map. get ( key) ; }
}
package com. hspedu. spring. factory ; import com. hspedu. spring. bean. Monster ; import java. util. HashMap ;
import java. util. Map ;
public class MyStaticFactory { private static Map < String , Monster > monsterMap; static { monsterMap = new HashMap < > ( ) ; monsterMap. put ( "monster01" , new Monster ( 100 , "牛魔王" , "芭蕉扇" ) ) ; monsterMap. put ( "monster02" , new Monster ( 200 , "狐狸精" , "美人计" ) ) ; } public static Monster getMonster ( String key) { return monsterMap. get ( key) ; } }
通过继承配置
@Test public void getBeanByExtends ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; Monster monster11 = ioc. getBean ( "monster11" , Monster . class ) ; System . out. println ( "monster11=" + monster11) ; Monster monster13 = ioc. getBean ( "monster13" , Monster . class ) ; System . out. println ( "monster13=" + monster13) ; }
< bean id= "monster10" class = "com.hspedu.spring.bean.Monster" > < property name= "monsterId" value= "10" / > < property name= "name" value= "蜈蚣精" / > < property name= "skill" value= "蜇人" / > < / bean> < bean id= "monster11" class = "com.hspedu.spring.bean.Monster" parent= "monster10" / >
< bean id= "monster12" class = "com.hspedu.spring.bean.Monster" abstract = "true" > < property name= "monsterId" value= "100" / > < property name= "name" value= "蜈蚣精~" / > < property name= "skill" value= "蜇人~" / > < / bean> < bean id= "monster13" class = "com.hspedu.spring.bean.Monster" parent= "monster12" / >
验证执行顺序
@Test public void testBeanByCreate ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; System . out. println ( "ok" ) ; }
< bean id= "student01" class = "com.hspedu.spring.bean.Student" depends- on= "department01" / > < bean id= "department01" class = "com.hspedu.spring.bean.Department" / >
测试scope
@Test public void testBeanScope ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; Cat cat = ioc. getBean ( "cat" , Cat . class ) ; Cat cat2 = ioc. getBean ( "cat" , Cat . class ) ; Cat cat3 = ioc. getBean ( "cat" , Cat . class ) ; System . out. println ( "cat=" + cat) ; System . out. println ( "cat2=" + cat2) ; System . out. println ( "cat3=" + cat3) ; }
package com. hspedu. spring. bean ;
public class Cat { private Integer id; private String name; public Cat ( ) { } public Integer getId ( ) { return id; } public void setId ( Integer id) { this . id = id; } public String getName ( ) { return name; } public void setName ( String name) { this . name = name; }
}
< bean id= "cat" class = "com.hspedu.spring.bean.Cat" scope= "prototype" lazy- init= "false" > < property name= "id" value= "100" / > < property name= "name" value= "小花猫" / > < / bean>
测试容器生命周期
@Test public void testBeanLife ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans.xml" ) ; House house = ioc. getBean ( "house" , House . class ) ; System . out. println ( "使用house=" + house) ; ( ( ConfigurableApplicationContext ) ioc) . close ( ) ; }
< bean class = "com.hspedu.spring.bean.Monster" id= "monster1000" > < property name= "monsterId" value= "${monsterId}" / > < property name= "skill" value= "${skill}" / > < property name= "name" value= "${name}" / > < / bean> < bean class = "com.hspedu.spring.bean.House" id= "house" init- method= "init" destroy- method= "destroy" > < property name= "name" value= "北京豪宅" / > < / bean>
后置处理器
< ? xml version= "1.0" encoding= "UTF-8" ? >
< 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" xsi: schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd" > < ! -- 配置House 对象-- > < bean class = "com.hspedu.spring.bean.House" id= "house" init- method= "init" destroy- method= "destroy" > < property name= "name" value= "大豪宅" / > < / bean> < bean class = "com.hspedu.spring.bean.House" id= "house02" init- method= "init" destroy- method= "destroy" > < property name= "name" value= "香港豪宅" / > < / bean> < ! -- 配置了一个Monster 对象-- > < ! -- 配置后置处理器对象老师解读1. 当我们在beans02. xml 容器配置文件 配置了 MyBeanPostProcessor 2. 这时后置处理器对象,就会作用在该容器创建的Bean 对象3. 已经是针对所有对象编程-> 切面编程AOP -- > < bean class = "com.hspedu.spring.bean.MyBeanPostProcessor" id= "myBeanPostProcessor" / > < / beans>
package com. hspedu. spring. bean ;
public class House { private String name; public House ( ) { System . out. println ( "House() 构造器..." ) ; } public String getName ( ) { return name; } public void setName ( String name) { System . out. println ( "House setName()=" + name) ; this . name = name; } public void init ( ) { System . out. println ( "House init().." ) ; } public void destroy ( ) { System . out. println ( "House destroy().." ) ; } @Override public String toString ( ) { return "House{" + "name='" + name + '\'' + '}' ; }
}
@Test public void testBeanPostProcessor ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans02.xml" ) ; House house = ioc. getBean ( "house" , House . class ) ; System . out. println ( "使用house=" + house) ; House house02 = ioc. getBean ( "house02" , House . class ) ; System . out. println ( "使用house02=" + house02) ; ( ( ConfigurableApplicationContext ) ioc) . close ( ) ; }
House ( ) 构造器. . .
House setName ( ) = 大豪宅
postProcessBeforeInitialization ( ) . . bean= House { name= '大豪宅' } beanName= house
House setName ( ) = 上海豪宅~
House init ( ) . .
postProcessAfterInitialization ( ) . . bean= House { name= '上海豪宅~' } beanName= house
House ( ) 构造器. . .
House setName ( ) = 香港豪宅
postProcessBeforeInitialization ( ) . . bean= House { name= '香港豪宅' } beanName= house02
House setName ( ) = 上海豪宅~
House init ( ) . .
postProcessAfterInitialization ( ) . . bean= House { name= '上海豪宅~' } beanName= house02
使用house= House { name= '上海豪宅~' }
使用house02= House { name= '上海豪宅~' }
House destroy ( ) . .
House destroy ( ) . .
自动装配
< ? xml version= "1.0" encoding= "UTF-8" ? >
< 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" xsi: schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd" > < ! -- 配置OrderDao 对象-- > < bean class = "com.hspedu.spring.dao.OrderDao" id= "orderDao" / > < ! -- 配置OrderService 对象老师解读1. autowire= "byType" 表示 在创建 orderService时通过类型的方式 给对象属性 自动完成赋值/ 引用2. 比如OrderService 对象有 private OrderDao orderDao3. 就会在容器中去找有没有 OrderDao 类型对象4. 如果有,就会自动的装配, 老师提示如果是按照 byType 方式来装配, 这个容器中,不能有两个的OrderDao 类型对象5. 如果你的对象没有属性, autowire就没有必要写6. 其它类推. . 7. 如果我们设置的是 autowire= "byName" 表示通过名字完成自动装配8. 比如下面的 autowire= "byName" class = "com.hspedu.spring.service.OrderService" 1 ) 先看 OrderService 属性 private OrderDao orderDao2 ) 再根据这个属性的setXxx ( ) 方法的 xxx 来找对象id3 ) public void setOrderDao ( ) 就会找id= orderDao对象来进行自动装配4 ) 如果没有就装配失败-- > < bean autowire= "byName" class = "com.hspedu.spring.service.OrderService" id= "orderService" / > < ! -- 配置OrderAction -- > < bean autowire= "byName" class = "com.hspedu.spring.web.OrderAction" id= "orderAction" / > < ! -- 指定属性文件老师说明1. 先把这个文件修改成提示All Problem 2. 提示错误,将光标放在context 输入alt+ enter 就会自动引入namespace3. location= "classpath:my.properties" 表示指定属性文件的位置4. 提示,需要带上 classpath5. 属性文件有中文,需要将其转为unicode编码-> 使用工具-- > < context: property- placeholder location= "classpath:my.properties" / > < ! -- 配置Monster 对象1. 通过属性文件给monster对象的属性赋值2. 这时我们的属性值通过${ 属性名} 3. 这里说的 属性名 就是 my. properties文件中的 k= v 的k-- > < bean class = "com.hspedu.spring.bean.Monster" id= "monster1000" > < property name= "monsterId" value= "${monsterId}" / > < property name= "skill" value= "${skill}" / > < property name= "name" value= "${name}" / > < / bean> < / beans>
package com. hspedu. spring. dao ;
public class OrderDao { public void saveOrder ( ) { System . out. println ( "保存 一个订单..." ) ; }
}
package com. hspedu. spring. service ; import com. hspedu. spring. dao. OrderDao ;
public class OrderService { private OrderDao orderDao; public OrderDao getOrderDao ( ) { return orderDao; } public void setOrderDao ( OrderDao orderDao) { this . orderDao = orderDao; }
}
扫描
< ? xml version= "1.0" encoding= "UTF-8" ? >
< 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" xsi: schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd" > < ! -- 配置容器要扫描的包老师解读1. component- scan 要对指定包下的类进行扫描, 并创建对象到容器2. base- package 指定要扫描的包3. 含义是当spring容器创建/ 初始化时,就会扫描com. hspedu. spring. component包下的所有的 有注解 @Controller / @Service / @Respository / @Component 类将其实例化,生成对象,放入到ioc容器4. resource- pattern= "User*.class" 表示只扫描com. hspedu. spring. component 和它的子包下的User 打头的类-- >
< ! -- < context: component- scan base- package = "com.hspedu.spring.component" / > -- > < ! -- 需求:如果我们希望排除某个包/ 子包下的某种类型的注解,可以通过exclude- filter来指定1. context: exclude- filter 指定要排除哪些类2. type 指定排除方式 annotation表示按照注解来排除3. expression= "org.springframework.stereotype.Service" 指定要排除的注解的全路径-- > < ! -- < context: component- scan base- package = "com.hspedu.spring.component" > -- > < ! -- < context: exclude- filter type= "annotation" expression= "org.springframework.stereotype.Service" / > -- > < ! -- < context: exclude- filter type= "annotation" expression= "org.springframework.stereotype.Repository" / > -- > < ! -- < / context: component- scan> -- > < ! -- 需求:如果我们希望按照自己的规则,来扫描包/ 子包下的某些注解, 可以通过 include- filter1. use- default - filters= "false" 表示不使用默认的过滤机制/ 扫描机制2. context: include- filter 表示要去扫描哪些类3. type= "annotation" 按照注解方式来扫描/ 过滤4. expression= "org.springframework.stereotype.Service" 指定要扫描的注解的全路径-- > < context: component- scan base- package = "com.hspedu.spring.component" use- default - filters= "false" > < context: include- filter type= "annotation" expression= "org.springframework.stereotype.Service" / > < context: include- filter type= "annotation" expression= "org.springframework.stereotype.Controller" / > < context: include- filter type= "annotation" expression= "org.springframework.stereotype.Repository" / > < / context: component- scan>
< / beans>
运用el表达式
< ? 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" > < ! -- 配置一个monster对象-- > < bean id= "monster01" class = "com.hspedu.spring.bean.Monster" > < property name= "monsterId" value= "100" / > < property name= "name" value= "蜈蚣精~" / > < property name= "skill" value= "蜇人~" / > < / bean> < ! -- spring el 表达式使用老师解读1. 通过spel给bean的属性赋值-- > < bean id= "spELBean" class = "com.hspedu.spring.bean.SpELBean" > < ! -- sp el 给字面量 -- > < property name= "name" value= "#{'韩顺平教育'}" / > < ! -- sp el 引用其它bean -- > < property name= "monster" value= "#{monster01}" / > < ! -- sp el 引用其它bean的属性值 -- > < property name= "monsterName" value= "#{monster01.name}" / > < ! -- sp el 调用普通方法( 返回值) 赋值 -- > < property name= "crySound" value= "#{spELBean.cry('喵喵的..')}" / > < ! -- sp el 调用静态方法( 返回值) 赋值 -- > < property name= "bookName" value= "#{T(com.hspedu.spring.bean.SpELBean).read('天龙八部')}" / > < ! -- sp el 通过运算赋值 -- > < property name= "result" value= "#{89*1.2}" / > < / bean>
< / beans>
package com. hspedu. spring. bean ;
public class SpELBean { private String name; private Monster monster; private String monsterName; private String crySound; private String bookName; private Double result; public SpELBean ( ) { } public String getName ( ) { return name; } public void setName ( String name) { this . name = name; } public Monster getMonster ( ) { return monster; } public void setMonster ( Monster monster) { this . monster = monster; } public String getMonsterName ( ) { return monsterName; } public void setMonsterName ( String monsterName) { this . monsterName = monsterName; } public String getCrySound ( ) { return crySound; } public void setCrySound ( String crySound) { this . crySound = crySound; } public String getBookName ( ) { return bookName; } public void setBookName ( String bookName) { this . bookName = bookName; } public Double getResult ( ) { return result; } public void setResult ( Double result) { this . result = result; } public String cry ( String sound) { return "发出 " + sound + "叫声..." ; } public static String read ( String bookName) { return "正在看 " + bookName; } @Override public String toString ( ) { return "SpELBean{" + "name='" + name + '\'' + ", monster=" + monster + ", monsterName='" + monsterName + '\'' + ", crySound='" + crySound + '\'' + ", bookName='" + bookName + '\'' + ", result=" + result + '}' ; }
}
注解配置
< ? xml version= "1.0" encoding= "UTF-8" ? >
< 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" xsi: schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd" > < context: component- scanbase- package = "com.hspedu.spring.component" / > < ! -- 配置两个UserService 对象-- > < bean class = "com.hspedu.spring.component.UserService" id= "userService200" / > < bean class = "com.hspedu.spring.component.UserService" id= "userService300" / >
< / beans>
package com. hspedu. spring. component ; import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. beans. factory. annotation. Qualifier ;
import org. springframework. stereotype. Controller ; import javax. annotation. Resource ;
@Controller
public class UserAction { @Resource ( name= "userService" ) private UserService userService200; public void sayOk ( ) { System . out. println ( "UserAction 的sayOk()" ) ; System . out. println ( "userAction 装配的 userService属性=" + userService200) ; userService200. hi ( ) ; }
}
package com. hspedu. spring. component ; import org. springframework. stereotype. Service ;
@Service
public class UserService { public void hi ( ) { System . out. println ( "UserService hi()~" ) ; }
}