标签:装配 springboot Spring 指定 bean 注解 name
------------恢复内容开始------------
@Configuration 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的 2、配置类本身也是组件 3、proxyBeanMethods:代理bean的方法 * Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】 * Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】 * 组件依赖必须使用Full模式默认。其他默认是否Lite模式 @Bean、@Component{ @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里, 也可以用在@Component注解的类里。添加的bean的id为方法名 } 、@Controller{ 视图层 @Controller用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象, 分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。@Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。
@Controller标记在一个类上还不能真正意义上说它就是SpringMvc的控制器, 应为这个时候Spring还不认识它,这个时候需要把这个控制器交给Spring来管理。 }@Service{ 此注注解属于业务逻辑层,service或者manager层
默认按照名称进行装配,如果名称可以通过name属性指定,如果没有name属性,注解写在字段上时, 默认去字段名进行查找,如果注解写在setter方法上,默认按照方法属性名称进行装配。 当找不到匹配的bean时,才按照类型进行装配,如果name名称一旦指定就会按照名称进行装配 }、@Repository{ 持久层 @Repository(value="userDao") 通常写在Dao接口上 (value="userDao")告诉Spring ,让Spring创建一个名字叫做"userDao"的实例 @Repository注解是Spring的注解,把类注册成一个bean。使用了此注解在mapper上后, 需要在主启动类添加@MapperScan才能编译之后会生成相应的接口实现类。 @Repository是spring注解需要和@MapperScan配合使用。 }
@ComponentScan、{
@ComponentScan是组件扫描注解,用来扫描@Controller @Service @Repository这类,
主要就是定义扫描的路径从中找出标志了需要装配的类到Spring容器中
}
@Mapper{
作用:用在接口类上,在编译之后会生成相应的接口实现类,是mybatis的注解。
位置:对应的某个接口类上面
如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用 @MapperScan
@Mapper 是对单个类的注解。是单个操作。
}
@MapperScan{
扫描mapper类的注解,就不用在每个mapper类上加@Mapper了
@MapperScan 是对整个包下的所有的接口类的注解。是批量的操作。
}
@Import{
@Import({User.class, DBHelper.class})
* 给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
如果只是单纯创建一个简单的无参组件 可以直接使用@import
}
@Resource{
注入
@Resource默认按照ByName自动注入,由J2EE提供,
需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,
而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略
。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序:
①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,
则回退为一个原始类型进行匹配,如果匹配则自动装配。
}
@Autowired{
注入
@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;
只按照byType注入。
一般配合@Repository使用
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,
可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
@Repository
public interface USerDao extends BaseDao<AppealInfo>{
...
}
public
class
TestServiceImpl {
@Autowired
@Qualifier
(
"userDao"
)
private
UserDao userDao;
}
@RequestMapping(path = "/login", method=RequestMethod.POST,params={"username=kolbe","password=123456"}){
value:指定请求的实际地址,指定的地址可以是URI Template模式。
method:指定请求的method类型,GET、POST、PUT、DELETE等。
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json、application/xml、text/html等。
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
params:指定request中必须包含某些参数值才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求
}
@ResponseBody{
@ResponseBody的作用其实是将java对象转为json格式的数据。
}
@RestController{
//
//@ResponseBody
//@Controller
//@RestController是上面两个注解的合体
}
标签:装配,springboot,Spring,指定,bean,注解,name 来源: https://www.cnblogs.com/wangjing1997/p/15009816.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。