6.25Spring学习笔记
实验18:使用@Autowired注解实现根据类型实现自动装配★
实验19:如果资源类型的bean不止一个,
默认根据@Autowired注解标记的成员变量名作为id查找bean,进行装配★
实验20:如果根据成员变量名作为id还是找不到bean,
可以使用@Qualifier注解明确指定目标bean的id★
实验21:在方法的形参位置使用@Qualifier注解
实验22:@Autowired注解的required属性指定某个属性允许不被设置
假设创建了这么几个类:BookSevlet,BookService,BookDao
在我们想要存放一本书的时候,
我们会在BookDao这个类里面写一个savabook()方法,
在BookService这个类里面写一个调用BookDao里面的savebook()的方法save()
在BookServlet这个类里面写一个调用BookService里面的save()的方法doget()
那么很清楚,我们需要在这些类里面分别创建其他类的对象,方便用来调用其他类的方法
以前我们是通过new的,而现在Spring非常强大,提供了自动装配功能,通过在创建类的对象语句上面注解@Autowired就能达到目的
比如这样:
@Controller
public class BookSevlet {
@Autowired
private BookService bookService;
}
如此容器就会自动帮你创建好BookService的对象,下面便可以直接调用BookService里面的方法了
注意:@Autowired的自动装配流程:
1.通过类型进行装配:
1.如果只有一个该类型的对象,便装配成功
2.如果有多个该类型的对象,便会将组件的名称作为id进行查找:
1.如果找到,就装配
2.如果没找到,就报错
2.我们也可以通过注解@Qualifier("")对该组件进行重命名,以便id查找,这里需要注意,像这样:
@Qualifier("bookService")
@Autowired
private BookService book;
如果通过@Qualifier("")对该组件进行重命名,那么,命名规则就是该组件首字母小写之后的样子(一定要注意大小写,否则会导致找不到,报空指针异常的错误)。
3.@Autowired默认必须装配成功,未装配成功则报错,但是我们可以通过注解来修改该行为,让其如果未找到,就会赋值未null,不报错
通过在注解@Autowired()里面添加required="false",默认为true,@Autowired(required="false")即可
4.如果我们的方法上面添加了@Autowired注解,那么在ioc容器被创建时,会自动调用该方法,并对参数进行装配,比如这样:
@Autowired
public void hello(BookService bookservice,BookServlet bookservlet){
}
那么在容器创建的时候,会自动将形参进行装配,装配流程同上
同时,在形参前面也可以加注解,比如给该组件命名id,运用@Qualifier注解,像这样:
@Autowired
public void hello(@Qualifier("bookService")BookService bookservice,BookServlet bookservlet){
}
5.@Autowired是Spring自己的一个自动装配注解,
而j2ee也自带一个叫@Resource的注解可以进行自动装配,是java的标准
优缺点与区别:
@Autowired:功能较为齐全与强大
@Resource:扩展性更强,如果切换其他一个容器,还能够被识别
Spring单元测试几步走:
1.导包:spring-test-4.0.0.RELEASE.jar
2.在junittest类上加注解@ContextConfiguration(location=“classpath:application.xml”)
3.然后通过Runwith注解调用Spring自己的junit4测试@RunWith(SpringJUnit4ClassRunner.class)
4.接下来就可以在该类中通过ioc容器调用其他组件了