【 3. p名称空间进行属性注入,将属性注入优化(① xml文件中文件头中要有 xmlns:p="http://www.springframework.org/schema/p" 这句; ② 之前属性注入:在< bean>中用< property>用 name="id" 、value="101" 属性; p名称空间< bean>中用 p:id="101" p:name="Jack" ;③ p名称空间引用已经存在的 bean,< bean>中用 p:x-ref="x",如:userDao对象已存在,userService中需要注入 userDao对象属性,用 p:userDao-ref="userDao";)
4. 自动装配:(a. 根据名称字段装配:autowire="byName",自动IOC容器中找与属性同名的对象(即属性名 set方法和 bean中对象的 id要完全相同),每个< bean>中添加 autowire="byName",或者全局添加即< beans>中添加 default-autowire="byName";
b. 根据类型装配:autowire="byType",IOC容器中只能有一个同类型对象,否则报错;也可在< beans>中添加 default-autowire="byType"进行全局定义。)
】
1. 通过构造方法
2. 通过 set方法对属性注入
(< bean>中< property>标签中利用 name 和 value 属性:name属性是用 set方法,去掉 set再首字母小写,value是为 name的 set方法对应的属性赋值; < bean>中< property>标签中利用 name 和 ref 属性:name属性是用 set方法,去掉 set再首字母小写,ref 引用已生成的 bean对象; 内部 bean:bean在内部,不需要 id,只能给外层的 bean使用,在外部不能使用了。)
1.1 User.java
public class User{
private int id;
private String name;
set、get();
public User(){
System.out.println("----对象被创建----");
System.out.println("----无参构造----");
}
public User(int id,String name){
System.out.println("----对象被创建----");
System.out.println("----有参构造----");
this.id=id; //
this.name=name; //
}
public void init_user(){
System.out.println("------对象初始化-----")
}
public void destory_user(){
System.out.println("------对象销毁-----")
}
}
1.2 bean.xml
1.3 Test.java
public class Test{
public static void main(String[] args) {
/*得到IOC容器*/
ApplicationContext ApplicationContext=new ClassPatnXmlApplicationContext("bean.xml");
System.out.println("----得到IOC容器----");
/*从容器中获取对象*/
User user=(User)applicationContext.getBean("user3");
System.out.println(user);
}
}
2.1 UserAction.java
public class UserAction{
private UserSerice userService;
public void setUserService(UserService userService){
this.userService=userService;
}
public String addUser(){
userService.save();
return null;
}
}
2.2 UserService.java
public class UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao){
this.userDao=userDao;
}
public void save(){
userDao.save();
}
}
2.3 UserDao.java
public class UserDao{
public void save(){
System.out.println("保存到数据库");
}
}
2.4 bean4.xml
(< bean>中< property>标签中利用 name 和 ref 属性:name属性是用 set方法,去掉 set再首字母小写,ref 引用已生成的 bean对象;)
//bean只能在内部使用,没有id
2.5 Test.java
public class Test{
public static void main(String[] args) {
/*得到IOC容器*/
ApplicationContext ApplicationContext=new ClassPatnXmlApplicationContext();
/*从容器中获取对象*/
UserAction userAction=(UserAction)applicationContext.getBean("userAction");//userAction2(内部bean)
userAction.addUser();
}
}
(① xml文件中文件头中要有 xmlns:p="http://www.springframework.org/schema/p" 这句; ② 之前属性注入:在< bean>中用< property>用 name="id" 、value="101" 属性; p名称空间< bean>中用 p:id="101" p:name="Jack" ;③ p名称空间引用已经存在的 bean,< bean>中用 p:x-ref="x",如:userDao对象已存在,userService中需要注入 userDao对象属性,用 p:userDao-ref="userDao";)
3.4 bean5.xml
//
3.5 Test.java
public class Test{
public static void main(String[] args) {
/*得到IOC容器*/
ApplicationContext ApplicationContext=new ClassPatnXmlApplicationContext("bean5.xml");
/*从容器中获取对象*/
User user=(User) applicationContext.getBean("user");
System.out.println(user);
System.out.println("---------");
UserAction userAction=(UserAction)applicationContext.getBean("userAction");
userAction.addUser();
}
}
Test.java 中直接输出user时运行结果:
Test.java 中添加 userAction时运行结果:
4. 自动装配
(a. 根据名称字段装配:autowire="byName",自动IOC容器中找与属性同名的对象(即属性名 set方法和 bean中对象的 id要完全相同),每个< bean>中添加 autowire="byName",或者全局添加即< beans>中添加 default-autowire="byName";
b. 根据类型装配:autowire="byType",IOC容器中只能有一个同类型对象,否则报错;也可在< beans>中添加 default-autowire="byType"进行全局定义。)
4.4 bean6.xml
//
4.5 Test.java
public class Test{
public static void main(String[] args) {
/*得到IOC容器*/
ApplicationContext ApplicationContext=new ClassPatnXmlApplicationContext("bean6.xml");
/*从容器中获取对象*/
UserAction userAction=(UserAction)applicationContext.getBean("userAction");
userAction.addUser();
}
}