导入spring核心架包:
- 标号一:日志需要的架包
- 标号而:spring的核心架包
spring核心IOC的实现和理解:
关键就是配置applictionContext.xml文件
在applicationContext.xml文件中引入bean schema约束
<?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"> </beans>
当然如果使用的是Sring Tool Suite工具编程,可以之间new里面找到一个 Spring Bean config file自动生成该约束
问题:发现引入规范约束后,没有关联对应的配置,原因是:
配置本地提示:点击eclipse属性——>选择XML Catalog
基础配置弄好了,可以尝试测试第一个Bean的创建了:在上面的applictionContext.xml中输入下列代码------>
<!-- bean:是spring工厂帮你new的一个对象(机制:反射机制) class:要new的对象的类型的字符串表示形式(一定全类名) id/name:标识对象的名字,用来获取bean对象用的标识。习惯上,这个名字命名为接口的名字首字母小写 --> <bean id="userDao" class="com.igeek.spring.UserDaoImpl"/>
下面就要在他的逻辑实现类中测试啦
public class UserServiceImpl implements IUserService{ public void login() { System.out.println("UserServiceImpl-service层被调用了。。。"); //spring的配置方式,IOC控制反转 //构建一个spring的工厂,使用applicationContext.xml(spring的核心配置文件)获取对象 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //从spring工厂中使用对象的标识id获取对象,这里就是ApplicationContext.xml文件中的 <bean id="userDao" class="com.igeek.spring.UserDaoImpl"/> IUserDao userDao = (IUserDao) ac.getBean("userDao"); userDao.findByUsernameAndPassword(); } }
那如何理解IOC和DI呢?
IOC即是:控制反转,就是在传统代码是一层一层new对象来调用,高度耦合的情况下,为避免高耦合而设计的解决方案:将获得依赖对象的过程反转了,就是将你的new过程交给spring容器(IOC容器)去操作
而DI:即依赖注入---->.就是将获得依赖对象的过程由自身管理变成由IOC容器主动注入
简而言之就是DI将IOC更加的操作简单化,全程由spring容器为你解决new对象的过程
下面就看看是怎么DI的:
<!-- ioc bean:是spring工厂帮你new的一个对象(机制:反射机制) class:要new的对象的类型的字符串表示形式(一定全类名) id/name:标识对象的名字,用来获取bean对象用的标识。习惯上,这个名字命名为接口的名字首字母小写 --> <bean id="userDao" class="com.igeek.spring.UserDaoImpl"/> <!-- service di:必须双方都是bean:在创建service的时候,主动将dao的依赖对象注入交给serivce --> <bean name="userService" class="com.igeek.spring.UserServiceImpl"> <!-- property: setter属性注入 * name:setter属性的名字,和类一致。如果setXxx,这里xxx,setUserDAO-userDAO * spring会自动调用setUserDao(IUserDao userDao)方法 * ref:spring容器中定义的bean(对象)的名字 --> <property name="userDao" ref="userDao"/> </bean>
BeanFactory和FactoryBean的区别?
BeanFactory:是一个工厂(其实是构建了一个spring上下文的环境,容器),用来管理和获取很多Bean对象,例如:加载applicationContext.xml文件。
FactoryBean:是一个Bean生成工具,是用来获取一种类型对象的Bean,它是构造Bean实例的一种方式。