什么是spring?
Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。
Spring的核心功能:
Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等)。
Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务。
Spring AOP:AOP服务。
Spring Web:提供了基本的面向Web的综合特性,提供对常见框架如Struts2的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器。
Spring MVC:提供面向Web应用的Model-View-Controller,即MVC实现。
Spring DAO:对JDBC的抽象封装,简化了数据访问异常的处理,并能统一管理JDBC事务。
Spring ORM:对现有的ORM框架的支持。
IOC和DI
IOC:
控制反转,指将对象的控制权转移给Spring框架,由 Spring 来负责控制对象的生命周期(比如创建、销毁)和对象间的依赖关系。
传统的应用程序是我们自己去创建(new)对象,为"正转",而IOC是将创建对象的工作交给Spring容器,对象是被动的被Spring容器创建,即为“反转”,“控制”即为Spring容器控制对象的创建。
目的:降低耦合度。
DI:
DI可以说是IOC的一种具体实现,在Spring创建对象的过程中,将对象依赖的属性注入到对象中,即创建A对象时将其依赖的B对象也一并创建并注入到A对象中。相对IOC 而言,“依赖注入”明确描述了“被注入对象依赖IOC容器配置依赖对象”。
使用注解:
1、在resources下建立applicationContext.xml
2、在applicationContext.xml中更改:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="Index of /schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="Index of /schema/context"
xsi:schemaLocation="
Index of /schema/context
http://www.springframework.org/schema/context/spring-context.xsd
Index of /schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
">
<context:component-scan base-package="com.yan"></context:component-scan>
</beans>
不能出错,否则会 警告: Ignored XML validation warning
IOC操作Bean管理:
bean管理:1、spring创建对象。2、spring注入属性
当我们在将一个类上标注@Service或者@Controller或@Component或@Repository注解之后,spring的组件扫描就会自动发现它,并且会将其初始化为spring应用上下文中的bean。 当需要使用这个bean的时候,例如加上@Autowired注解的时候,这个bean就会被创建。
@Autowired注解:
作用:可以标注在属性上、方法上和构造器上,来完成自动装配。默认是根据属性类型,spring自动将匹配到的属性值进行注入。
它可以标注在属性上、方法上和构造器上。
@Qualifier注解:
1、在使用@Autowire自动注入的时候,加上@Qualifier(“test”)可以指定注入哪个对象;
2、可以作为筛选的限定符,我们在做自定义注解时可以在其定义上增加@Qualifier,用来筛选需要的对象。
在main方法中:
public class Main {
public static void main(String[] args) {
ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");
Clazz c=context.getBean(Clazz.class);
System.out.println(c);
}
}
在Clazz类中:
@Component("Clazz")
public class Clazz {
@Autowired
@Qualifier("arr")
private int[] arr;
@Autowired
private List<String> list;
@Override
public String toString(){
return "{"+
", arr=" + Arrays.toString(arr) +
", list=" + list +
'}';
}
}
在另外一个类Config中:
@Configuration
public class Config {
@Bean("arr")
public int[] initArr(){
return new int[]{12,3,34,41,32,2};
}
@Bean("list")
public LinkedList<String> initList(){
LinkedList<String> list= new LinkedList<>();
list.add("dsda");
list.add("21");
list.add("无敌");
return list;
}
}
添加toString方法后,输出:
{arr=[12, 3, 34, 41, 32, 2], list=[dsda, 21, 无敌]}
@Configuration注解:它是一个类级别的注释,表明一个对象是 bean 定义的来源。@Configuration类通过带@Bean注释的方法声明 bean 。@Bean对@Configuration类方法的调用也可用于定义 bean 间的依赖关系
@Configuration在spring的注解开发中占有很重要的地位,你当你想要定义一个配置类并交给spring管理的时候你就可以在相关类上面加这个注解,并配合@Bean注解把对象交个spring去管理
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。目的是创建一个类。当spring需要创建指定的一个类时会调用这个注解(@Bean)的方法。