IOC容器的基本用法三
来源:互联网 发布:centos 开启ftp 编辑:程序博客网 时间:2024/05/21 17:36
- 采用注解的方式进行获取
<!--给Dao、Service、Servlet注册,采用注解的方式,Spring遇到这类注解标注的类都会自动加入到容器中 这些注解都是特殊含义的 @Service:建议给sevice类添加 @Controller:建议给servlet类添加 @Respository:Dao类添加 @Component:其他想要加入到容器中的组件 注:Spring地层并不会去区分这些注解的含义,统一认为是加入容器的标志,这只是给程序员自己看的 这些注解默认的组件的id是类名首字母小写 可以修改,注解(value="新id"); 同样的,注解修饰的组件也是IOC容器启动时,创建的,默认也是单例的 可以修改作用域 两个注解配合使用, @特定注解 @scope(value="作用域") 要实现这个功能,需要用到context命名空间,来让Spring知道,这些注解修饰的类要加入到容器中 --> <!--component-scan来扫描组件 base-package:基础包,Spring会扫描这个包及这个包下的所后代自包 --> <context:component-scan base-package="com.fgy"></context:component-scan>
2. 使用context:exclude-filter指定扫描包时不包含的类
<!--默认是扫描包下的所类 --> <context:component-scan base-package="com.fgy"> <!-- type="annotation":排除模式 annotation:排除指定的注解, expression="":要排除的注解的全类名 "assignable":排除指定的类,及该类下的所子类 expression=""要排除类的全类名 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> <context:exclude-filter type="assignable" expression="com.fgy.dao.BookDao"/> </context:component-scan>
3. 使用context:include-filter指定扫描包时要包含的类
<!--默认是扫描包下的所类 --> <context:component-scan base-package="com.fgy" use-default-filters="false"> <!-- 必须的设置 use-default-filters="false" type="annotation":指定扫描模式 annotation:扫描指定的注解, expression="":要扫描的注解的全类名 "assignable":扫描指定的类,及该类下的所子类 expression=""要扫描类的全类名 --> <!-- --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan>
4. 使用@Autowired注解实现根据类型实现自动装配<!--@Autowired自动装配属性对象值,get、set方法都不用写 1.属性上标注@Autowired,IOC容器创建对象的时候,会为这个属性自动赋值 2.赋值流程: 1)先照类型赋值 2)如果组件的类型多个,则照其属性名作为组件的id进行赋值 3)如果照变量名都找不到,@Qualifier("id")指定id,来查找装配的组件 4)@Qualifier都找不到,就报错,但是现在不让它报错 默认的情况下,@Autowired标注的属性,一定要装配上,否则就报错 要实现装不上不报错的方法: 在@Autowired(required=false),表示这个属性的装配不是必须的,装不上就算了,不报错 3.给set方法标注的@Autowired和给property标签复赋值一样,自动赋值 4.@Resource和@Autowired那个好:前者是Java定义的规范,后者是自己的东西,我们用哪个呢?我们应该是表规范好一点,别人也能用 这个规范,假设第二个IOC容器,这个容器框架不认识Spring的@Autowired注解,但是认识Java规范,兼容性好。但是,不幸的是IOC容器和AOP 合起来的这个框架,市场上仅一家,所以不用担心兼容性问题 -->
5. 泛型依赖注入
以简单书城项目为类:在dao包内有三个类,BaseDao,UserDao,BookDao;public class BaseDao <T>{ public void save() { System.out.println("BaseDao:将数据保存到数据库中......"); }}@Repositorypublic class BookDao extends BaseDao<Book> { public void save() { System.out.println("保存图书到数据库中......"); }}@Repositorypublic class UserDao extends BaseDao<User> { @Override public void save() { System.out.println("保存用户到数据库中......"); }}在service包中也有三个类BaseService,BookService,UserServicepublic class BaseService<T> { @Autowired protected BaseDao<T> baseDao;}@Servicepublic class UserService extends BaseService<User>{ public void save() { baseDao.save(); } }@Servicepublic class BookService extends BaseService<Book>{ public void save() { baseDao.save(); }}测试类public class IOCTest { ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml"); @Test public void test() { BookService bookService= ioc.getBean(BookService.class); UserService userService = ioc.getBean(UserService.class); bookService.save(); userService.save(); }}
阅读全文
0 0
- IOC容器的基本用法三
- IoC容器源码-容器的基本用法
- Spring的IoC容器基本工作原理
- IoC 容器基本实例
- Vector容器的基本用法
- Docker 容器的基本用法
- Spring IOC容器的两种基本形式
- 实例化Spring Ioc容器的三种方式
- Spring初始化Ioc容器的三种方法
- Spring IoC容器实例化bean的三种方式
- spring IOC容器创建对象的三种方式
- Spring揭秘 学习笔记三 (Spring的IoC容器 ApplicationContext)
- Spring框架:启动IOC容器的三种方式
- IOC容器的理解
- spring的Ioc容器
- Jbpm4的IOC容器
- Spring的IoC容器
- IoC容器的实现
- Eclipse中的buildpath详解
- Java基础部分第七节
- nginx+php出现No input file specified解决办法
- 配置了<mvc:resources>但是静态资源还是找不到报404
- 推荐:使用nginx sticky实现基于cookie的负载均衡
- IOC容器的基本用法三
- 游标
- Java是如何读取和写入浏览器Cookies的
- 《C#图解教程》第4章 类的基本概念 读书笔记
- 7-29 删除字符串中的子串
- Bi-shoe and Phi-shoe LightOJ
- 文章标题
- S3C2440处理器结构
- GetMemory的详解