spring
提示:这本文入门使用
文章目录
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、SpringIOC容器的注解使用
public @interface Autowired
在之前的项目中,我们都是通过xml文件进行bean或者某些属性的赋值,其实还有另外一种注解的方式,在企业开发中使用的很多,在bean上添加注解,可以快速的将bean注册到ioc容器。
Bean: person
Controller:personcontroller
Service:personservice
Dao:persondao
在resources的applicationcontext.xml中写入bean
< bean id=“personcontroller” class=“com.controller.personcontroller”>< /bean>
再用junit做单元测试(导入maven)
@Test:注意,给测试类起名字的时候千万不要定义成Test测试的方法不可以有参数,不可以有返回值
context=new ClassPathXmlApplicationContext(applicationContext.xml)
personController pc=context.getBean(personController,personController.class)
sout(pc)
1.常用注解
当使用注解的时候,可以在当前类的上面添加某些注解标识
@Component:组件,理论上可以在任意的类上进行添加,在扫描的时候都会完成bean的注册
@Controller:放置在控制层,用来接受用户的请求
@Service:放置在业务逻辑层
@Repository:放置在数据访问层dao
这四个注解写在类上面的时候都可以完成注册bean的功能,但是这些规定并不是spring识别的标识在spring程序运行过程中,不会对这四个注解做任何区分,看起来是一样的,都会完成bean的注册功能在实际的开发过程中,最好能分清楚,提高代码的可读性。所以,最偷懒的方式是,给所有需要注册的bean类上添加@Component注解
在使用注解的时候,还需要告诉spring应该从哪个包开始扫描
xmlns:context(导入context命名空间)
<context:component-scan base-package=" com.包名"X/context :component-scan>
2.注解识别
在使用注解的时候没有定义id和class,那么如何根据id来进行识别是把当前类的名称的首字母小写之后做识别的。
成认是把当前类的名称的首字母小写之后作为id,如果需要改变名称,那么需要在注解添加参数值value来完成修改名字
persontroller(value = “personController02”)
public class PersonController {
}
context.getBean(personcontroller02)
success!!
@Scope(value=“prototype/singleton”)实现单例多例
3.定义扫描包时要包含的类和不要包含的类
一般在定义的时候都写上相同包的路径
当定义好注解的扫描路径之后,可以做更细粒度的控制,可以选择扫描哪个注解,也可以选择不扫描哪个注解
<context:.exclude.filter type="" expression="" />
include-filter:表示要包含扫描的注解(一般不用)
exclude-filter:表示要排除扫描的注解
type:规则的类型
expression:表达式
assignable:可以指定对应的类的名称。但是表达式必须是完全限定名
annotation:按照注解来进行排序,但是表达式中必须是注解的完全限定名
regex:使用正则表达式的方式,一般不用
aspectj:使用切面的方式,一般不用
custom:使用自定义的方式,可以自己定义自己的筛选规则,一般不用
4、使用@AutoWired进行自动注入
注意:当使用AutoWired注解的时候,自动装配的时候是根据类型实现的。
1、如果只找到一个,则直接进行赋值,
2、如果没有找到,则直接抛出异常,
3、如果找到多个,那么会按照变量名作为id继续匹配,
1.匹配上直接进行装配
2.如果匹配不上则直接报异常
如果你想通过名字进行查找,可以自己规定名称,使用注解 @Qualifier
当@AutoWired添加到方法上的时候,此方法在创建对象的时候会默认调用,同时方法中的参数会进行自动装配
@Qualifier注解也可以定义在方法的参数列表中,可以指定当前属性的id名称
5.自动装配的注解@AutoWired,@Resource
@Qualifier注解也可以定义在方法的参数列表中,可以指定当前属性的id名称使用@Resource可以完成跟@AutolWired相同的作用:
1、@Resource是jdk提供的功能,@AutoWired是spring提供的功能
2、@Resource可以在其他框架中使用,而@AutoWired只能在spring中使用
也就是说,@Resource扩展性好,而@AutoWired支持的椎架比较单一
3、@Resource是按照名称进行装配的,如果名字找不到,那么就使用类型而@AutoWired是按照类型进行装配,如果类型找不到那么就使用名字进行查找
6.泛型依赖注入
总结
路漫漫其修远兮