Spring简介
Spring 是轻量级的开源的 JavaEE 框架,有两个核心部分IOC和AOP,IOC是控制反转,将创建对象的过程交给Spring容器去管理,AOP是面向切面,不修改源代码就可以对功能就行加强
IOC的使用
方式一:
首先先创建一个类,在类上加@Configurable注释表名这个类是配置类
@Configurable // 表示这是一个配置类,替代xml配置文件
@ComponentScan(basePackages = {"com.student"}) // 表示扫描这个包下的注解
public class SpringConfig {
}
创建Bean,Bean就是交给Spring IOC管理的对象,在类上加上下面合适的注解将类交给Spring容器去管理,默认创建的对象名就是第一个字母小写的类名
@Controller 访问层(等学了springmvc后再详细介绍)
@Service 业务逻辑层
@Repository 持久层
@Component 除上述三种注解的其它情况
@Component
public class Student {
}
方式二:
在配置类中使用@Bean(bean名称)进行注册,这种方式可以创建两个不同的对象
@Configurable // 表示这是一个配置类,替代xml配置文件
@ComponentScan(basePackages = {"com.student"}) // 表示扫描这个包下的注解
public class SpringConfig {
/*
这种方法可以创建两个不同的对象
*/
@Bean("person")
@Scope() // Bean的作用域从单例变为原型,如果不加这个创建出来的依然是同一个对象
//@Resource
public Person create3(){
return new Person();
}
}
启动容器,获取对象
// 启动容器
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(SpringConfig.class);
// 获取这个类
Student student = context.getBean("student", Student.class);
属性注入
@Autowired
根据属性类型进行自动装配属性
1、@Autowired默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)
2、@Autowired匹配到同类型的对象不唯一时,会匹配和该属性名称相同的Bean,如果没有或不唯一,则报错
3、@Autowired 可以和@Qualifier一起用,分别限定类型和名称
@Resource
根据名字来自动装配属性
一般不指定名字,默认按属性名注入,也可以指定名字,那就按名字注入
1.一般不指定属性名字,默认按属性名注入,没找到对象,则回退为按类型进行匹配,如果匹配唯一对象则自动装配,否则报错
2. 如果指定了name,则从上下文中查找名称匹配的bean进行装配,找不到则报错
使用有参构造方法生成对象
一般情况默认使用无参构造方法生成对象,如果没有无参构造只有有参构造的情况方法参数必须在容器中存在或者显示的指定,如果类中有多个有参构造会报错
一定要确保每一个类都有一个无参构造