Spring框架|基于注解三层架构的项目改造

170 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

byType自动注入@Autowired(掌握)

需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配 Bean 的方式。使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。

image.png

@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。注意:如果可注入的类型多于一个,则按名称进行二次匹配.如果有匹配到则注入,如果没有匹配到,则报错

image.png

byName自动注入@Qualifier(了解)

需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。当有相同类型的多个实现类时,使用@qualifier就可以确定是哪个实现类了。

image.png

如果可注入的类型多于一个,则按名称进行匹配.如果有匹配到则注入,如果没有匹配到,则报错

基于注解三层架构的项目改造

在每个类上添加创建对象的注解@Controller,@Service,@Repository,每个需要依赖注入的成员变量使用按类型@Autowired依赖注入即可.

UsersMapperImpl.java

@Repository\
public class UsersMapperImpl implements UsersMapper {\
    @Override\
    public int insert(Users users) {\
        System.*out*.println(users.getName()+"增加成功!");\
        return 1;\
    }\
}

UsersServiceImpl.java

@Service\
public class UsersServiceImpl implements UsersService {\
    //切记切记:一定会有数据访问层的对象,调用它完成底层数据库的操作\
    @Autowired\
    UsersMapper usersMapper ;//= new UsersMapperImpl();\
    @Override\
    public int insert(Users u) {\
        return usersMapper.insert(u);\
    }\
}

UsersController.java

@Controller\
public class UsersController {\
    //切记切记:一定会有业务逻辑层的对象,指向实现类    @Autowired\
    UsersService usersService;// = new UsersServiceImpl();\
    //完成控制器中的增加用户的方法\
    public int insert(Users users){\
        return usersService.insert(users);\
    }\
}