您现在的位置是:首页 >其他 >Spring第九阶段:Spring的注解功能网站首页其他
Spring第九阶段:Spring的注解功能
简介Spring第九阶段:Spring的注解功能
注解功能
1、注解配置Dao、Service、Controller组件
通过注解分别创建Dao、Service、Controller
Spring配置bean的常用注解有
@Controller 配置web层的组件
@Service 配置Service组件
@Repository 配置Dao组件
@Component 配置JavaBean( 除Service , Dao , Controller组件之外的JavaBean )
@Scope 配置单例,或多例
@Scope("prototype") // 表示多例 , 默认不使用@Scope注解表示单例
如果需要自定义id值. 只需要在注解中直接注入value属性值即可.
/**
* @Component 注解的作用相当于: <br/>
* <bean class="com.atguigu.annotation.Book" id="book"></bean> <br/>
* class 属性是当前Bean的全类名 <br/>
* id 属性默认是当前类名首字母小写 <br/>
*/
@Component
public class Book { }
/**
* @Controller 注解的作用相当于: <br/>
* <bean class="com.atguigu.annotation.BookController" id="bookController"></bean> <br/>
* class 是当前类的全类名 <br/>
* id 是类名首字母小写 <br/>
*/
@Controller
public class BookController { }
/**
* @Repository注解作用相当于: <br/>
* <bean class="com.atguigu.annotation.BookDao" id="bookDao"></bean>
* class 属性是当前类的全类名 <br/>
* id 默认是类名首字母小写 <br/>
*/
@Repository
public class BookDao { }
/**
* @Service 注解的作用相当于: <br/>
* <bean class="com.atguigu.annotation.BookService" id="bookService"></bean> <br/>
* class 属性是当前类的全类名 <br/>
* id 属性是当前类名首字母小写 <br/>
*/
@Service
public class BookService { }
在applicationContext.xml配置文件中加入包扫描才可以使用注解:
<!--
context:component-scan 表示组件扫描
base-package 是你要搜索的包.( 也会扫描子包 )
-->
<context:component-scan base-package="com.atguigu"></context:component-scan>
测试
public class SpringTest {
@Test
public void test1() {
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println(applicationContext.getBean("book"));
System.out.println(applicationContext.getBean("bookDao"));
System.out.println(applicationContext.getBean("bookService"));
System.out.println(applicationContext.getBean("bookController"));
}
}
2、指定扫描包时的过滤内容
使用context:include-filter指定扫描包时要包含的类
使用context:exclude-filter指定扫描包时不包含的类
<context:include-filter /> 设置包含的内容
<context:exclude-filter /> 设置排除的内容
注意:通常需要与use-default-filters属性配合使用才能够达到“仅包含某些组件”这样的效果。即:通过将use-default-filters属性设置为false,
applicationContext.xml 中配置的内容如下
<!-- use-default-filters="false" 设置取消默认包含规则 -->
<context:component-scan base-package="com.atguigu" use-default-filters="false">
<!-- context:include-filter 设置包含的内容 -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<!-- context:exclude-filter 设置排除的内容 -->
<context:exclude-filter type="assignable" expression="com.atguigu.service.BookService"/>
</context:component-scan>
以上配置会包含所有@Service注解的类。排除com.atguigu.service.BookService类
3、使用注解@Autowired自动装配
使用@Autowired注解实现根据类型实现自动装配
@Autowired 注解 会自动的根据标注的对象类型在Spring容器中查找相对应的类。如果找到,就自动装配。
使用@Autowired注解,不需要get/set方法
@Service
public class BookService {
/**
* @Autowired 注解的作用是在Spring容器中查找需要的Bean对象.然后赋值 <br/>
* 1 先按类型查找,找到一个就注入 <br/>
*
*/
@Autowired
private BookDao bookDao;
@Override
public String toString() {
return "BookService{" +
"bookDao=" + bookDao +
'}';
}
}
4、多个同类型的bean如何自动装配
如果资源类型的bean不止一个,默认根据@Autowired注解标记的成员变量名作为id查找bean,进行装配
@Service
public class BookService {
/**
* @Autowired 注解的作用是在Spring容器中查找需要的Bean对象.然后赋值 <br/>
* 1 先按类型查找,找到一个就注入 <br/>
* 2 如果按类型查找到多个,接着按属性名做为id继续查找并注入 <br/>
*/
@Autowired
private BookDao bookDao;
@Override
public String toString() {
return "BookService{" +
"bookDao=" + bookDao +
'}';
}
}
5、使用@Qualifier装配指定id的bean对象
如果根据成员变量名作为id还是找不到bean,可以使用@Qualifier注解明确指定目标bean的id
@Service
public class BookService {
/**
* @Autowired 注解的作用是在Spring容器中查找需要的Bean对象.然后赋值 <br/>
* 1 先按类型查找,找到一个就注入 <br/>
* 2 如果按类型查找到多个,接着按属性名做为id继续查找并注入 <br/>
* 3 @Qualifier("xxx")注解可以指定一个id到Spring容器中查找并注入 (会忽略属性名) <br/>
*/
@Qualifier("bookDao")
@Autowired
private BookDao bookDaoExt;
@Override
public String toString() {
return "BookService{" +
"bookDao=" + bookDaoExt +
'}';
}
}
6、@Autowired注解的required属性作用
@Autowired注解的required属性指定某个属性允许不被设置
@Service
public class BookService {
/**
* @Autowired 注解的作用是在Spring容器中查找需要的Bean对象.然后赋值 <br/>
* 1 先按类型查找,找到一个就注入 <br/>
* 2 如果按类型查找到多个,接着按属性名做为id继续查找并注入 <br/>
* 3 @Qualifier("xxx")注解可以指定一个id到Spring容器中查找并注入 (会忽略属性名) <br/>
* 4 如果@Qualifier("xxx")注解没有按照指定id找到Bean,也可以设置required = false允许字段值为null.
*/
@Qualifier("bookDao1")
@Autowired(required = false)
private BookDao bookDaoExt;
@Override
public String toString() {
return "BookService{" +
"bookDao=" + bookDaoExt +
'}';
}
}
7、@Autowired和@Qualifier在方法上的使用
在方法的形参位置使用@Qualifier注解
/**
* @Autowired 注解如果标识在方法上,则Bean对象创建好之后,就会马上调用,一般用于给JavaBean属性初始化赋值 <br/>
* 1 Spring框架会自动的按参数的类型到Spring容器中按类型查找Bean并传递赋值 <br/>
* 2 如果按类型找到多个,再按参数名做id继续查找并赋值 <br/>
* 3 使用@Qualifier("xxx")注解在参数上指定一个id到Spring容器中查找并注入 (会忽略参数名) <br/>
* 4 如果@Qualifier("xxx")注解没有按照指定id找到Bean,也可以设置required = false允许方法不调用
*/
@Autowired(required = false)
public void abc(@Qualifier("bookDao1") BookDao bookDaoExt1){
System.out.println("abc() ===>>> " + bookDaoExt1);
this.bookDaoExt = bookDaoExt1;
}
8、泛型注入
测试泛型依赖注入
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。