持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
byType自动注入@Autowired(掌握)
需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配 Bean 的方式。使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。
@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。注意:如果可注入的类型多于一个,则按名称进行二次匹配.如果有匹配到则注入,如果没有匹配到,则报错
byName自动注入@Qualifier(了解)
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。当有相同类型的多个实现类时,使用@qualifier就可以确定是哪个实现类了。
如果可注入的类型多于一个,则按名称进行匹配.如果有匹配到则注入,如果没有匹配到,则报错
基于注解三层架构的项目改造
在每个类上添加创建对象的注解@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);\
}\
}