如果使用注解自动扫描组件请在Spring文件中配置如下:
<context:annotation-config />
<context:component-scan base-package="com.companyName.projectName.dao.impl" />
<context:component-scan base-package="com.companyName.projectName.service.impl" />
注意:一般人喜欢把包路径直接对应到工程目录下,那样不是很良好的写法,spring会扫描工程下所有组件,性能大大的浪费了。所以一般那里使用就对应到那个包下。
?常用的注解:@Autowired、@Service
@Autowired写法:
@Autowired
private IcustomerDao customerDao;
@Service写法:
@Service
public class customerDaoImpl implements IcustomerDao{
??????? //省略代码内容
}
疑问:使用@Autowired必须要有@Service吗?
答案:a、可以有;b、可以没有
a可以有:Spring文件中没有配置bean时两个必须有,否则确实@Service的话Spring无法找到对应的bean就会报异常。
b可以没有:在Spring文件中配置bean这对应的接口实现类不需要@Service,bean配置如下:
<bean id="crmOrderDao" class="com.companyName.projectName.dao.impl.CrmOrderDaoImpl"? parent="BaseSqlMapClientDAO">
</bean>
疑问:@Service不是针对service层实现用的注解吗?怎么用到Dao实现了呢?
答案:我理解的是只要是被调用的接口实现类都为@Service,就是因为就@Service的标记实现类,那么使用@Autowired时候Spring才可以准确的找到对应的接口实现。
疑问:使用这个注解有什么好处吗?
答案:省去接口的get、set方法,省去bean的配置,节省编码时间,容易维护配置信息。
今天先分享到这,以后再慢慢写。累哦-. -!
开工^ -^@Repository
疑问:有人说dao层不是应该使用@Repository注解吗?为什么会是@Service答案:对的,没错,标准写法dao是使用@Repository,之所以写为@Service是懒人写法,@Service可以写在dao层,并且不会有任何问题,功能也一样。那么@Repository是个什么东东?有毛用呢?Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository 注解便属于最先引入的一批,它用于将数据访问层 (dao 层 ) 的类标识为 Spring Bean。为什么 @Repository 只能标注在 DAO 类上呢?@Service可以标注dao和service呢?这是因为该注解的作用不只是将类识别为 Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 Spring 本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架,相信有了这个解释小朋友们就不会纠结dao使用@Service和@Repository了吧。懒人写法不需要把持久层的异常封装为Spring,所以我可以一次性生成所有代码包含固定的注解。当然这个怎么使用跟自己习惯了。
@Component
是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。目前我还没用过这个东东,不知道有没有什么好处,建议大家给出见解。
@Constroller
通常作用在控制层,一般大家使用ssh会用于action中,等我遇到奇葩问题的时候再跟大家分享问题与答案。
@Resource
疑问:有人说你很2呀,谁说必须要用@Autowired才可以自动装配呀?@Resource也可以的有木有?
答案:yes,正解,您说的非常对。那么大家来了解下两者的区别吧?比较重要的一点是@Resource不是单例的,而@Autowired则是单例的。@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解 析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用 byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。
小伙伴们还有问题吗?没问题了可就要下课了哦,今天就到这了,改天继续,欢迎大侠们来吐槽。