将对象存储在Spring中,有两种注解类型:类注解和方法注解
类注解:@Controller、@Service、@Repository、@Component、@Configuration
1.@Contorller(控制器存储)
2.@Service(服务存储)
3.@Repository(仓库存储)
4.@Component(组件存储)
5.@Component(配置存储)
类注解的存储方式都是一样的,将类注解写在要存储的类的上方,如下代码,可以将@Controller换成任意一个类注解,效果都是一样的
import org.springframework.stereotype.Controller;
@Controller
public class StudentController {
public void sayHi() {
System.out.println("Hi student");
}
}
既然五个类注解的效果都是一样的,为什么不只用一个固定的反而要用五个呢?
这是为了让程序员在看到这些类注解以后,可以直接指导这些类注解的用途。比如:
@Controller 业务逻辑层
@Service 服务层
@Repository 持久层
@Configuration 配置层
为什么只有四个?@Component去哪里了?
在我们查看类注解的源码的时候,我们发现其实@Component是其余四个类注解的“父类”
读取Bean对象的方法
import com.java.demo.controlloer.StudentController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
StudentController studentController = context.getBean("studentController", StudentController.class);
studentController.sayHi();
}
}
getbean方法中的第一个参数的作用是获取类名。有两种命名规则 第一种是上面代码中的将类名的第一个字母小写,第二种方法是当类名的第一个字母和第二个字母都是大写的时候,直接把类名写进去就可以,不需要做任何改变
方法注解@Bean
方法注解必须要配合类注解才可以使用而且被方法注解的方法必须有返回值并且返回的是一个对象,我们可以再@Bean后面加上这个方法的名字(自定义)也可以有多个名字,方便读取bean对象。
import com.java.demo.entity.User;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class UserBeans {
@Bean(name = {"user", "u1"})
public User getUser() {
User user = new User();
user.setUid(1);
user.setUsername("张三");
user.setPassword("123456");
user.setAge(18);
return user;
}
}
这是User类
public class User {
private Integer uid;
private String username;
private String password;
private Integer age;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
读取bean对象
和类注解读取对象的方法一样
import com.java.demo.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
User user = context.getBean("user", User.class);
System.out.println(user.getUsername());
}
}