自动装配说明
<bean id="user" class="com.kuang.pojo.User" autowire="byName">
<property name="str" value="qinjiang"/>
bean>
<bean id="user" class="com.kuang.pojo.User" autowire="byType">
<property name="str" value="qinjiang"/>
bean>
@Autowired和@Resource注解有什么区别?
@Component
作用就是注解在一个类上,表示将此类标记为Spring容器中的一个Bean,实现bean的注入,它的三个衍生注解:@Controller、@Service、@Repository
@Component 和 @Bean 的区别
@Component 和@Bean都是声明一个bean交给spring管理,但他们在使用上有一些区别:
作用对象不同: @Component 注解作用于类,而@Bean注解作用于方法。
@Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。
@Bean 注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean告诉了Spring这是某个类的示例,当我需要用它的时候还给我。
@Bean 注解比 Component 注解的自定义性更强,而且很多地方我们只能通过 @Bean 注解来注册bean。比如当我们引用第三方库中的类需要装配到 Spring容器时,则只能通过 @Bean来实现。
@Configuration 和 @Component 到底有啥区别?
Spring 注解中 @Configuration 和 @Component 的区别总结为一句话就是:
@Configuration 中所有带 @Bean 注解的方法都会被动态代理(cglib),因此调用该方法返回的都是同一个实例。而 @Conponent 修饰的类不会被代理,每实例化一次就会创建一个新的对象。
从定义来看, @Configuration 注解本质上还是 @Component,因此 context:component-scan/ 或者 @ComponentScan 都能处理@Configuration 注解的类。
@Configuration+@bean
的效果和xml配置效果一样
举例:
package redis.pojo;
import org.springframework.beans.factory.annotation.Value;
public class User {
@Value("HAHAHA")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
package redis.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.pojo.User;
@Configuration
public class XxConfig {
@Bean
public User getUser(){
return new User();
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import redis.config.XxConfig;
import redis.pojo.User;
public class test {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(XxConfig.class);
User bean = (User) context.getBean("getUser");
System.out.println(bean.getName());
}
}
HAHAHA
举例:
package redis.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class User {
@Value("HAHAHA")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
import org.springframework.context.annotation.ComponentScan;
@ComponentScan("redis.pojo")
public class XxConfig {
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import redis.config.XxConfig;
import redis.pojo.User;
public class test {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(XxConfig.class);
User bean = (User) context.getBean("user");
System.out.println(bean.getName());
}
}
HAHAHA