java - spring - Spring注解

https://www.cnblogs.com/clamp7724/p/11757304.html

之前做的ssm结构的小练习,结合这个看比较好。

1.

@Controller

控制器, 添加给controller(servlet)层

2.

@Service

服务,添加给service(业务逻辑)层

3.

@Repository

储存库,添加给数据库(持久化,dao)层

4.

@Component

组件,给其他(不属于以上3种)的层

spring配置文件中,加入

<!-- 配置spring创建容器时要扫描的包,扫描注解, base-package的值是需要扫描的包名 -->
    <context:component-scan base-package="com.itheima">

    </context:component-scan>

spring在启动时会扫描src下,com.itheima包中有以上注解的类,然后代理类,加入到ioc容器中(4种注解乱加也都可以生成bean使用,但是为了可读性所以最好对应加)。

生成的bean的id(类的对象的变量名)是类名首字母小写。

单例模式。

注解后面可以跟参数,类型是String,自定义bean的id e.g. @Controller("aaa")

5.

@scope(value = "prototype")

class上面加上这个注解,表示这个class生成多实例。

6.

spring配置文件中:

可以在context:component-scan中添加额外条件

<!-- 配置spring创建容器时要扫描的包,扫描注解, base-package的值是需要扫描的包名 -->
<context:component-scan base-package="com.itheima">
        <!--制定扫包规则,扫描@Server注解的JAVA类 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Server" />

        <!--制定扫包规则,不扫描@Controller注解的JAVA类,其他的还是要扫描 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

type = annotation  按照注解注解筛选

type = assignable  按照类名筛选

7.

@autowired

自动注入 (也叫依赖注入,自动装配等,其实就是自动赋值 - -,spring的主要功能之一)

通过反射生调用到get,set方法,自动生成对象然后赋值。

    @Autowired   //自动注入,取到spring创建的代理对象,对业务层进行操作。 spring的ioc容器会先匹配类型,
//如果有多个(继承),匹配变量名是不是类名的小写,所以这里最好规范写。
//如果ioc中有多个AccountService类型的bean,同时名字也匹配不到,会直接报错。
private AccountService accountService; @RequestMapping("findAll") public ModelAndView findAll(){ ModelAndView mav = new ModelAndView(); mav.setViewName("findAllAccount"); List<Account> accountList = accountService.findAll(); mav.addObject("accountList", accountList); return mav; }

@autowired(required  = false)

找不到直接赋值null,不会报错了- - 不过一般不会这么干。。。编译没错误,但是业务逻辑错误了

8.

qualifier("指定的变量名")    

    @Autowired   //自动注入,取到spring创建的代理对象,对业务层进行操作。 spring的ioc容器会先匹配类型,
@Qualifier("accountService") //加上这个可以指定在ioc中对应的bean, 下面的变量名可以随便写了- -不过基本不会这么干
private AccountService accountServiceExt;

9.

@Resource

也可以用来自动装配,不过是javaEE中自带的,autowired是spring框架中提供的,功能更强大(比如autowired可以设置required = false来默认是null,Resource中没有这个参数)

但是因为是java自带,属于标准注解,扩展性和兼容性更好(不依赖于spring框架)。

10.

猜你喜欢

转载自www.cnblogs.com/clamp7724/p/11919319.html