基于注解的DI注入是目前项目中最常使用到的,使用起来也是最方便的 ,大大降低了我们开发人员对象的管理难度, 对于做javaEE开发的web项目而言,效果非常的明显
context:component-scan 标签是扫描包结构的,容器启动会扫描指定包和其子包下的的注解,这个包的可以具体指定,也可以指定一个范围比较大的顶级包,但是不建议指定范围太大的包,这样大大降低spring管理对象的性能,
需要在类上添加Component 注解, 该注解的作用可以简单理解为将该Bean交由Spring容器来管理
【Component】不指定value属性,Bean的id 是类名首字母小写
此外: Spring还提供了另外三个注解,都是Component的细化 ,@Controller ,@service , @repository
分别对应于项目的控制层,业务层和框架持久层,
那么这是基于DI注解注入的方式来属性对象的创建,如何使用DI注解实现给对象的属性赋值呢?
在属性上添加@value(“xxx”)
ByType方式的自动注入
ByName方式的自动注入
@Component("myStudent")
public class Student{
@value
private string name;
@value
private int age;
@autowired
@Qualifier("mySchool")
private School school;
}
@Componet("mySchool")
public class School{
@value()
private ... ;
@value()
private ... ;
}
//很明显通过ByName的方式导入比ByType看起来复杂一点,
//实际项目中也大多使用ByType来实现DI注入完成属性的赋值,
//而且在实际项目开发中禁止使用ByName和ByType同时使用的情况
此外JDK也提供了一个注解来完成属性的赋值,@Resource,要求JDK必须是1.6以上的版本
@Component("myStudent")
public class Student {
...
@Resource(name="mySchool")//默认使用byName
private School school;
...
}
@Component("mySchool")
public class School{
@value("清华大学")
private String Name;
...
}
这种方式也是很常用的
那么注解的方式和XML文件这两种常见对象完成属性的赋值有没有什么缺点呢?
注解优点是:
⚫ 方便
⚫ 直观
⚫ 高效(代码少,没有配置文件的书写那么复杂)。
其弊端也显而易见:以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
XML 方式优点是:
⚫ 配置和代码是分离的
⚫ 在 xml 中做修改,无需编译代码,只需重启服务器即可将新的配置加载。
xml 的缺点是:编写麻烦,效率低,大型项目过于复杂。
我们项目中使用Spring的出发点还是解耦合,如果今天有个人问你你不用框架能不能做项目 你应该说能,但是用框架做我要3万,不用框架我要5万,不用项目开发起来太累的,光JDBC数据连接池就要写吐了,你说为了差一个数据库中表的字段你写一大堆。。。。,
以上就是Spring-IOC 控制反转的一些基本知识点,关于IOC的作用,控制反转 :顾名思义就是将对象的控制权由类文件JAVA代码交给我们的Spring容器来进行统一的管理,统一完成对象的创建,属性的赋值、
后面谈谈AOP面向切面编程