索引、
1、Spring—IOC简介及功能?
2、 来写一个案例(使用配置文件创建对象)
一、使用配置文件来创建对象
二、使用配置文件来给对象的属性赋值(bean装配)。
3、 使用注解来创建对象
4、 其他注解
Spring—IOC简介及功能?
Spring Framework的核心是IoC(Inverstion of Control ,控制反转)容器,IOC容器是一个用于“基于组建的体系结构”的设计模式,它将“判断依赖关系”的职责移交给容器,而不是由组建本身来判断彼此之间的依赖关系。这样依赖就可以大大提高组件的可移植性和可重用性。
简单来说就是使用它来创建对象,实现解耦合。
来写一个案例
一、使用配置文件来创建对象
简单步骤如下:
1、jar包
2、在spring-config.xml 配置(别名applicationContext.xml)
3、获得工厂。获得示例
1、创建一个Spring项目
2、导入jar包
需要的jar包:
3、在spring-config.xml 配置
class写 要new的类 id下面说
4、写个测试,获得工厂
①创建一个 ClassPathXmlApplicationContext类 参数写spring-config.xml 路径
②调用getBean方法,来个参数(“userDao”, UserDao.class);参数一:spring-config.xml 里的id 参数二:返回的类对象。
③这里就相当于了 UserDao userDao = new UserdaoImpl(),调用实现类方法hello 就完事了。
二、使用配置文件来给对象的属性赋值(bean装配)。
1、在spring-config.xml 配置
2、不同赋值对象
①直接给属性赋值、使用value:
i:给String或者int赋值
ii还可以给数组设置
iii给map类的属性赋值
iiii 给实体类dog赋值,(先给dog类实体bean赋值)
iiiii 通过构造器赋值
②给属性赋一个引用类型的值、使用ref
ref :映射的类 property name :属性名,对应下面声明的UserDao
相当于: UserDao userDao =new UserDaoImpl2();
三、 使用注解来创建对象
简单步骤如下:
1、jar包
2、在spring-config.xml 配置扫描范围
3、编写注解
4、获得工厂。获得示例
1、需要再额外添加一个jar包
2、扫描,路径下的文件才可以使用注解
3、使用注解创建对象
①在类的头上使用注解
还记得配置文件怎么创建的吗?
写一个test测试:
结果:
有点麻烦!不写id会怎么样?
强大的框架也能正常工作,但是getBean里的id填写谁??
不用担心,IOC给了一个默认id,就是把类名字母小写 作为id
②给bean装配对象,根据name值查找装配的对象。
指着userdao,按下Alt+Enter 可以看出引用的是
③给bean装配对象,使用默认值查找装配的对象。
如果不填写name值呢? IOC 会自动查找它的实现类并且装配
如果它存在多个实现类呢??比如有两个,可以在要装配的实现类头上标@Primary
实例:
测试一下:
结果:
实际开发还可能把@ Resource 拆分成 @ AutoWired 和 @ Qulifier
@ AutoWired
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。
@ Qulifier
用来指定引用实体的id。
其实@Component是所有受Spring 管理组件的通用形式,web、Service、Dao 的@Component不推荐使用
常用注解
①三层架构的创建对象注解
把@Component拆分成3层
①、@Controller对应表现层的Bean,也就是Action,这个注解非常有用,用来声明我们之前经常写的.xxxCenerServlet,待我们学完Spring-mvc框架或者Structs2框架就懂了
②、@Service
@Service对应的是业务层Bean
③、@ Repository
@Repository对应数据访问层
这些注解的作用:https://tomfish88.iteye.com/blog/1497557
bean装配注解
@ Resource
@ AutoWired
@ Qulifier
其他注解
√@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。 √
@Lazy(true) 表示延迟初始化
@Scope注解 作用域 用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
√@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常 √
@PostConstruct 初始化注解
@PreDestroy 摧毁注解
@Async异步方法调用