(JavaEE)Spring中的常用注解

今天我第一次在CSDN平台上分享所学到的知识,以后也会经常分享的,大家以后就叫我小杰好啦!

 言归正传:我们今天一起来探究一下Spring中的常用注解!可能是本人太屌丝所以不会使用太多晦涩的术语,主要是理解流程与思想。来,我先把今天我们要学习的Spring中的几个注解先列出来。=> (@Component、@Controller、@Service、@Repository、@Autowired、@Qualifier)。

首先我们说Spring中的依赖注入有两种方式(xml配置文件式、注解式)个人认为注解式方便,xml配置文件式查找起来看起来比较清楚。今天我们学习的这个基于注解的依赖注入方式首先要搞清楚我们要什么?

需求分析:

    1.怎么实例化Bean

    2.怎么将Bean装配到IOC容器中

    3.在一个类中怎么注入其他类的实例

    4.假如有两个关于dao层的实例我们在别的类中将其注入的话怎么区分注入哪个

来,我们一步一步的来解决这个问题:

-工程目录,由于我们介绍的是Spring暂时就不用Maven的高级工程,直接用一个普通的动态工程就可以了,来上截图


壳子造好了,下面我们就将对应的controller、service、dao中对应的类进行生成



下面这个是与mapper中的sql相对应的接口


下面再造一个实现类 ...


诚如大家所见@Controller与@Service与@Repository就是用来标识表现层、业务逻辑层、持久化层中    ,那我们在这些类上加上注解就是被Spring管理了吗?不是的,此时还没有因为你并没有告诉Spring去哪找到他们。所以我们在根目录下新建一个applicationContext.xml用来指明上述被标识的类,让他们受Spring来管理。


我们在applicationContext.xml中加上的这句话就是扫描com.jtxy.Spring父包下面的所有子包下面的类,如果找到带有@Controller、@Service、@Repository注解的就将他们纳入Spring的管理范畴。细心的朋友发现此时我还没有保存,看看保存后的状态。


这些类上面就都有Spring的小s标识了,这就代表我们的这些类已经被Spring管理,如果你的eclipse没有安装SpringIDE或者你使用的是普通的eclipse而非STS的话是不显示小s标识的,尽管这并不会影响代码运行。    

下面我们就来搞一个测试类


这个测试类我们是想打印一下这些bean 看看Spring是否已经将上面的类实例化并将其放入IOC容器中。但是遇到一个问题这些类的Bean的名称我们怎么指定呢?

来别慌,以前xml式的时候我们都是直接在标签上加上id名,接下来我们的工作与其差不多只不过我们是基于注解的所以指定Bean的名称也必须在注解中进行指定。




接下来我们获取Bean的过程就圆满了


看看打印结果(如果没抱错正确打印对象的地址就代表我们的Spring在管理了我们类以后自动将其实例化并装配到IOC容器中供我们取用)


完美!

接下来我们来解决剩下的问题,就是在一个类中引用其他的类的Bean,=>相当于xml式中的ref


难道这样就将AddShopInfoService类的Bean(实例)拿过来了吗?不是的,你看他并没有经特殊的处理也并没有被new,接下来我们的@Autowired注解派上用场了,@Autowired注解的作用就是将其下面的类的Bean引用过来,


那好我们为剩下类都来搞一下


好了我们分别为这些类中创建对应的方法来模拟项目运行




来我们在测试类中测试一下


如果运行结果没抱错(空指针异常)并且成功打印上面这些类中的方法的语句就说明我们上面@Autowired注解起作用了,就说明每个属性都被引用上对应类的Bean(实例)了。


是不是很神奇?

但是这种情况很极端,假如我的一个包下还有其他的dao类呢?在AddShopInfoService类中使用@Autowired注解是否可以找到对应的类呢?来我们试试。




我们来看看当dao层有两个Execute接口的实现类的情况下AddShopInfoService类中@Autowired注解是否能正确引用对应类的Bean


结果是否定的,因为有两个都被标识@Repository注解的Bean,@Autowired找不到对应的实例。那怎么办呢?于是最后一位主角 登场@Qualifier注解来指定引用那个Bean



来我们再来看看打印结果


这样是不是那就将引用的ExecuteImpl类与AddShopInfoImpl类区分了呢?想引用哪个Bean通过@Autowired注解与@Qualifier注解来指定。

对啦对啦还有一个@Component注解我通常用他来标识出三层架构之外的类,就比如我们的一个实体类

我们这样定义




总结:

    在配好扫描组件以后只要我们在对应的类上标识@Controller、@Service、@Repository注解,Spring就会将其纳入Spring的管理,并将其实例化装配到IOC容器中供我们 取用,至于@Autowired注解与@Qualifier注解通常组合使用用来指定引用的Bean。相当于xml式的ref,对于其它非三层架构范畴内的推荐使用@Component来标识。

好啦今天Spring常用的注解就先介绍到这里啦!由于才疏学浅可能说的不对不好,还望大家指正!




猜你喜欢

转载自blog.csdn.net/qq_39872652/article/details/80725805