- 前言
- 一、Spring的优势是什么?
- 二、使用步骤
- 三、Bean标签基本配置
- 四、Bean生命周期配置
- 五、Bean实例化三种方式
- 六、Bean的依赖注入
- 七、Bean的依赖注入方式
- 八、Bean的依赖注入的数据类型
Spring的IOC和DI
一、Spring的优势是什么?1.方便解耦,简化开发
2.AOP编程的支持
3.声明式事务的支持
4.方便程序的测试
5.方便集成各种优秀框架
6.降低JavaEE API的使用难度
1.导入Spring开发的基本包坐标
代码如下(示例):
org.springframework spring-context 5.3.15
2.编写Dao接口和实现类
代码如下(示例):
public interface UserDao { public void save(); } public class UserDaoimpl implements UserDao { @Override public void save() { System.out.println("zhangsan"); } }
3.创建Spring核心配置文件
4.在Spring配置文件中配置UserDaoImpl
5.使用Spring的API获得Bean实例
public class UserDaoDemo { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save(); } }三、Bean标签基本配置
默认情况下它调用的是类中的无参构造函数。
基本属性:
1.id:Bean的实例的唯一标识
2.class:Bean的完整路径
3.scope属性的取值:
singleton:默认值 单例的
Bean的实例化时机:spring核心文件被加载时
prototype:多例的
Bean的实例化时机:调用getBean()时
init-method:指定类中的初始化方法名称
destroy-method:指定类中的销毁方法名称
public void init() { System.out.println("初始化方法"); } public void destroy() { System.out.println("销毁方法"); }五、Bean实例化三种方式
1.无参构造函数方法实例化
它会根据默认无参构造方法来创建对象,如果没有则创建失败
2.工厂静态方法实例化
工厂的静态方法返回Bean实例
public class StaticFactory { public static UserDao getUserDao() { return new UserDaoimpl(); } }
3.工厂实例方法实例化
工厂的非静态方法返回Bean实例
public class DynamicFactory { public UserDao getUserDao() { return new UserDaoimpl(); } }六、Bean的依赖注入
1.创建UserService,UserService内部在调用UserDao的save方法
public interface UserService { public void save(); } public class UserServiceimpl implements UserService { @Override public void save() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save(); } }
2.将UserServiceImpl的创建权交给Spring
3.从Spring容器中获得UserService进行操作
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService) applicationContext.getBean("userService"); userService.save();七、Bean的依赖注入方式
1.构造方法
①创建有参构造函数
public class UserServiceimpl implements UserService { private UserDao userDao; public UserServiceimpl(UserDao userDao) { this.userDao = userDao; } @Override public void save() { userDao.save(); } }
②配置Spring容器调用有参构造函数进行注入
constructor-arg当中的name是构造函数当中的参数名
2.set方法
①在UserServiceImpl中添加setUserDao方法
public class UserServiceimpl implements UserService { private UserDao userDao; public UserServiceimpl(UserDao userDao) { this.userDao = userDao; } @Override public void save() { userDao.save(); } }
②配置Spring容器调用set方法1进行注入
property当中的name是set后面的名字
p命名空间注入的本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中。
首先,需要引入P命名空间
xmlns:p="http://www.springframework.org/schema/p"
其次,修改注入方式
八、Bean的依赖注入的数据类型
以set方法注入。构造函数方法以后补充。也可参考前面
1.普通数据类型
public class UserDaoimpl implements UserDao { private String userName; private int age; public void setUserName(String userName) { this.userName = userName; } public void setAge(int age) { this.age = age; } @Override public void save() { System.out.println(userName+"====="+age); System.out.println("zhangsan"); } }
2.引用数据类型
public class User { private String name; private String addr; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } @Override public String toString() { return "User{" + "name='" + name + ''' + ", addr='" + addr + ''' + '}'; } }
3.集合数据类型
property当中的name都是该类型所属名字
public class UserDaoimpl implements UserDao { private ListstringList; private Map userMap; private Properties properties; public void setStringList(List stringList) { this.stringList = stringList; } public void setUserMap(Map userMap) { this.userMap = userMap; } public void setProperties(Properties properties) { this.properties = properties; } @Override public void save() { System.out.println(stringList); System.out.println(userMap); System.out.println(properties); System.out.println("zhangsan"); } }
aaa bbb ccc ppp1 ppp2 ppp3