- 控制反转,不用自己去new对象
- 分层式一站式的轻量型框架
- maven java项目
- utils工具类、controller表现层、service业务层、mapper\dao持久层、moudlle\jopo\domian\entity实体类
- resources里面的mapper文件夹存放xxxmapper.xml文件
- service放业务的接口只声明方法不进行实现。有一个impl文件夹来实现这个接口
- test文件夹写测试类,普通调用方法:创建对象来调用方法;
IOC:首先配置applicationContext.xml文件,在配置文件中编写标签,将类交给spring管理(bean工厂),里面写的是类不是接口,这样就不需要自己去创建对象来调用方法了。
spring工厂加载配置文件创建了对象
spring创建的对象默认是单例的,创建两次,但是只有一个对象,使用的使用一个。
ClassPathXmlApplicationContext是相对路径,直接写文件名称即可,FileSystemXmlApplicationContext是绝对路径需要写本地文件的路径。 - Bean****管理的配置文件方式
id属性,Bean起个名字,在约束中采用ID的约束,唯一,取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 id:不能出现特殊字符。
class属性,Bean对象的全路径。
scope属性,scope属性代表Bean的作用范围。
singleton单例(默认值),最常用的方式。
prototype多例
request应用在Web项目中,每次HTTP请求都会创建一个新的Bean
session应用在Web项目中,同一个HTTP Session 共享一个Bean
Bean对象的创建和销毁的两个属性配置
说明:Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法
init-method,当bean被载入到容器的时候调用init-method属性指定的方法
destroy-method,当bean从容器中删除的时候调用destroy-method属性指定的方法 - 实例化bean对象的三种方式
实例化的对象是无参构造方法:
<bean id="us" class="cn.tx.service.UserServiceImpl" />
静态工厂实例化:
< bean id = "us" class = "cn.tx.demo1.StaticFactory" factory - method = "createUs" />
creatUs是静态方法
动态工厂实例化:
dfactory" class="cn.tx.demo1.Dfactory" />
dfactory" factory-method="createUs" />
- 依赖注入(spring ioc的核心技术)
将依赖对象注入到Bean组件中!(DI)
-
属性的set方法注入值:
提供属性的set方法,<bean id="os" class="cn.tx.service.OrderServiceImpl"> <property name="orderDao" ref="od" /> <property name="msg" value="你好" /> <property name="age" value="30" /> </bean> <bean id="od" class="cn.tx.dao.OrderDaoImpl"></bean>
基本类型使用value,其他类型使用:ref
-
属性构造器方法方式注入值,有参构造器:
<bean id="car" class="cn.tx.demo2.Car"> <constructor-arg name="cname" value="大奔" /> <constructor-arg name="money" value="400000" /> </bean> <bean id="car" class="cn.tx.demo2.Car"> <constructor-arg index="0" value="大奔" /> <constructor-arg index="1" value="400000" /> </bean>
-
数组,集合**(List,Set,Map)****,Properties等的注入**
<bean id="collectionBean" class="cn.tx.demo3.CollectionBean"> <property name="strs"> <array> <value>美美</value> <value>小凤</value> </array> </property> <property name="list"> <list> <value>熊大</value> <value>熊二</value> </list> </property> <property name="map"> <map> <entry key="aaa" value="老王"/> <entry key="bbb" value="小王"/> </map> </property> <property name="properties"> <props> <prop key="username">root</prop> <prop key="password">123456</prop> </props> </property> </bean>
都是用property标签
数组array;list集合list;map集合map---entry--key--value;properties:props--prop
- 多配置文件的加载方式
- 主配置文件中包含其他的配置文件:
- 工厂创建的时候直接加载多个配置文件:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml","applicationContext2.xml");
- IOC注解的方式(半注解、纯注解)
- 半注解
@component(value="os")相当于application.xml文件中的bean,交给spring来管理
需要在application.xml文件种开启扫描注解
@Autowired,根据属性的类型注入这个类的实现类来进行赋值,可以不提供set方法
- bean管理类常用注解
@compnent
@Controller表现层
@Service业务层
@Repository 持久层(dao\mapper)
compnent包括其他三个,这四个注解的意义就是将该类创建的对象交给spring去管理。 - 依赖注入常用的注解
@Value 用于注入普通类型(String,int,double等类型)
@Autowired 默认按类型进行自动装配( 引用类型 ),当类型有多个实现类的时候使用Qualifier注解
@Qualifier 和@Autowired一起使用,强制使用名称注入
@Resource Java提供的注解 ,也被支持。使用name属性,按名称注入
对象生命周期(作用范围)注解,代替上面那一种方式
@Scope 生命周期注解,取值singleton(默认值,单实例)和prototype(多例)
初始化方法和销毁方法注解(了解),直接写在方法上
@PostConstruct 相当于init-method
@PreDestroy 相当于destroy-method - 纯注解
纯注解的目的是替换掉所有的配置文件。但是需要编写配置类。
@Configuration 声明配置
@ComponentScan 扫描具体包结构的
@Import注解 Spring的配置文件可以分成多个配置的,编写多个配置类。用于导入其他配置类
还可以扫描多个包或者再测试方法中,加载多个配置类(一般不用这种方法)
@bean也是交给spring管理的注解,但是一般放在方法上面,一般加在方法上面。,一般用于第三方的,比如:datasource,没有写这个类,只能通过new第三饭放的东西交给spring 框架去管理。 - Spring框架整合JUnit单元测试
每次运行测试都要编写创建工厂,比较繁琐
在测试类上面加上这个,第一个注解声明它是测试单元
使用纯注解方法: