在使用spring框架,需要配置以下五个基础包
下面通过一个示例演示Spring框架的使用
首先项目层级结构如下:
在接口UserDao中定义一个say()方法:
package com.itheima.ioc;
public interface UserDao {
public void say();
}
在Userdao接口的实现类UserDaolmpl中实现接口中say()的方法
package com.itheima.ioc;
public class UserDaoImpl implements UserDao {
public void say() {
System.out.println("userDao say hello World !");
}
}
在Spring中的配置文件applicationContext中配置
可知在配置文件中创建了一个id为userDao的Bean,class属性用于指定需要实例化Bean的类
如图:
现在创建TestloC测试输出
package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoC {
public static void main(String[] args) {
//1.初始化spring容器,加载配置文件
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取userDao实例
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
//3.调用实例中的say()方法
userDao.say();
}
}
结果:
现在通过一个案例理解掌握依赖注入(以属性setter方法注入的的方式为例,讲解Spring容器在应用中是如何实现依赖注入)
创建接口UserService
package com.itheima.ioc;
public interface UserService {
public void say();
}
在UserService接口的实现类UserServicelmpl中实现接口中say()的方法,并声明userDao属性,并添加属性的setter方法
package com.itheima.ioc;
public class UserServiceImpl implements UserService {
// 声明UserDao属性
private UserDao userDaoccc;
// 添加UserDao属性的setter方法,用于实现依赖注入
public void setUserDaoaaabbb(UserDao userDaoccc) {
this.userDaoccc = userDaoccc;
}
// 实现的接口中方法
public void say() {
//调用userDao中的say()方法,并执行输出语句
this.userDaoccc.say();
System.out.println("userService say hello World !");
}
}
在Spring中的配置文件applicationContext中配置,创建id为userService的Bean,将userDao的实例注入到userService中
注:一般情况下name与ref一般同名,但次为了表述其区别特意起名不同以区分
创建测试类TestDl测试输出:
package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
public static void main(String[] args) {
//1.初始化spring容器,加载配置文件
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取UserService实例
UserService userService =
(UserService) applicationContext.getBean("userService");
//3.调用实例中的say()方法
userService.say();
}
}
结果:
接下来,注重讲解name与ref区别
引用 Spring中<property name =““ ref = ““>标签 name和ref的区别_XiangZ4的博客-CSDN博客
Spring中<property name =““ ref = ““>标签 name和ref的区别
首先我们要知道Spring是通过对象的set方法来进行注入。
ref:引用一个已经存在的对象如下图
name:name属性中的值指的是bean中id所指向的类中的set方法后面的那个字段
在这里插入图片描述
当我们将set后面的字段修改的话就会报错
之所以setUserDao与property中的name名字必须一致是因为该案例采用了setter方法注入的方式为例。该方式也是实际开发中最常用的一种方式。



