Spring Boot常用注釈

7237 ワード

@Spring Bootation:
  • @SpringBootConfiguration:現在のクラスはSpringBootアプリケーションの構成クラスであり、プロジェクトの中には一つしかないと宣言しました.だから普通は自分で追加する必要がないです.
  • @EnableAutoConfiguration:springアプリケーションの自動構成をオンにして、Spring Bootはあなたの追加した依存とあなたの定義したbeanに基づいて、あなたの欲しい構成を推測して配置しようとします.例えばspring-boot-starter-webを導入しましたが、このスターターにはtomcat、SpringMVCの依存が追加されています.この時自動配置でwebアプリを開発すると分かりますので、webとSpringMVCのデフォルト設定を完成しました.この自動構成は、spring-boot-at configreに依存して
  • を見ることができる.
  • @ComponentScan:注釈スキャンを開始し、これらの属性が指定されていない場合は、この注釈が宣言されているクラスの所在を示すパケットから開始し、スキャンパケットおよびサブパケットをスキャンする.@controller@service@repository@component@Configurationによって注釈されたクラスは、これらのクラスをスプリング容器に組み込んで管理し、@Beanを使用する必要がない.
  • @SpringBootApplication
    public class TestApplication {
        public static void main(String[] args) {
            SpringApplication.run(TestApplication.class, args);
        }
    }
    
    @RertController
    XxxControllerクラスでの使用は、@ResponseBody@Controller聯がどのような状況で@ResonseBody注釈を使用するのに相当しますか?
    @RestController
    public class HelloController {
    
        @GetMapping("show")
        public String test(){
            return "hello Spring Boot!";
        }
    }
    
    @service
    事務に用いる
    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        public User queryById(Long id){
            return this.userMapper.selectByPrimaryKey(id);
        }
    
        @Transactional
        public void deleteById(Long id){
            this.userMapper.deleteByPrimaryKey(id);
        }
    }
    
    @repository
    恒久層
    @component
    コンポーネントを指します.規格に合わない場合、この注釈を使って表示してもいいです.
    //   
    @Component
    public class MyInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle method is running!");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle method is running!");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion method is running!");
        }
    }
    
    javaの設定
    @Configration:クラスを構成クラスとして宣言し、その後Spring容器はそれによってIoC容器を生成してビーンを配置します.XxConfigrationクラスで使用します.@ProptySource:外部属性ファイルを指定します.@PropertySource@Value:属性注入@Bean:方法上、方法の戻り値をBean容器に加えると宣言しています.Springは自動的にこの方法を呼び出して、方法の戻り値をSpring容器に入れます.パラメータを持っていない場合は、関数名(例のdataSource)をBeanの名前として保存します.name属性を付与して、名前をアクティブに設定することもできます.Autowired:Spring容器から任意の位置で抽出し、属性に注入する
    @Configuration
    @PropertySource("classpath:jdbc.properties")
    public class JdbcConfiguration {
    
        @Value("${jdbc.url}")
        String url;
        @Value("${jdbc.driverClassName}")
        String driverClassName;
        @Value("${jdbc.username}")
        String username;
        @Value("${jdbc.password}")
        String password;
    
        @Bean
        public DataSource dataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(url);
            dataSource.setDriverClassName(driverClassName);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            return dataSource;
        }
    }
    
    テスト
    @RestController
    public class HelloController {
    
        @Autowired
        private DataSource dataSource;
    
        @GetMapping("show")
        public String test(){
            return "hello Spring Boot!";
        }
    }
    
    Spring他のビームを組み立てる方法
    Springは@Bean以外にもIoC容器にビームを入れることができます.Component:どの種類がSpring IoC容器に走査されているかを明示します.@ComponentScan:どのような戦略を採用して走査組み立てBeanを表示しますか?普通は直接@Spring Bootationで代用します.
    SpringBootの属性注入方式
    @ConfigrationPropties(prefix=「jdbc」)Spring Bootの属性注入方式は、各種java基本データタイプと複雑なタイプの注入をサポートします.修飾を要求するクラスの中の名前は配置と一致しています.そしてset方法が必要です.@Valueを省くことができます.
    @EnbleConfigrationPropties(Jdbc Propties.class)は、他のクラスに@ConfigrationProptiesが配置されているクラスを注入する場合、この注釈を追加する必要があります.
    @ConfigurationProperties(prefix = "jdbc")
    public class JdbcProperties {
        private String url;
        private String driverClassName;
        private String username;
        private String password;
        // ...  
        // getters   setters
    }
    
    注入する
    @Configuration
    @EnableConfigurationProperties(JdbcProperties.class)
    public class JdbcConfiguration {
    
        @Autowired
        private JdbcProperties jdbcProperties;
    
        @Bean
        public DataSource dataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(jdbcProperties.getUrl());
            dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
            dataSource.setUsername(jdbcProperties.getUsername());
            dataSource.setPassword(jdbcProperties.getPassword());
            return dataSource;
        }
    
    }
    
    @Request Mapping
    Web要求のマッピングを設定し、{}でその変数部分を表します.
        @RequestMapping(value = {  
            "",  
            "/page",  
            "page*",  
            "view/*,**/msg"  
        })
    
    @GetMapping@GetMappingは、結合注釈であり、@RequestMapping(method = RequestMethod.GET)の略語である.
    @PostMapping@PostMappingは、結合注釈であり、@RequestMapping(method = RequestMethod.POST)の略語である.
    @PathVarable
    @RestController
    @RequestMapping("test")
    public class MyController {
    
        @Autowired
        private User user;
    
        @GetMapping("{subPath}")
        public String test(@PathVariable("subPath") String subPath) {
            if (subPath.equals("all")) {
                return user.toString();
            } else if (subPath.equals("name")) {
                return user.getUserName();
            } else {
                return null;
            }
        }
    }
    
    @RequestMapping("/user/{username}/blog/{blogId}")
    @ResponseBody
    public String getUerBlog(@PathVariable String username , @PathVariable int blogId) {
        return "user: " + username + "blog->" + blogId;
    }
    
    この場合、Springは、名前に応じて自動的に付与される関数パラメータ値でもあり、@PathVarableに具体的なURL変数値を表示しても良い.デフォルトの場合、@PathVarableの注釈のパラメータは、基本的な簡単なタイプであってもよい.int、long、Date、Stringなど、Springは、URL変数の具体的な値および関数パラメータの種類に応じて自動的に変換することができ、例えば、/user/fpc/blog/1は、「fpc」の値をusernameに割り当て、1はint変数blog Idに割り当てられます.
    @Request Param
    @RestController
    @RequestMapping("/test")
    public class Test {
    
        @GetMapping("test.do")
        //    username           name   
        public void test(@RequestParam(name = "username") String name) {
            System.out.println(name);
        }
    
        @GetMapping("user.do")
        //    username           user   ,alias            a   
        public void userAndAlias(@RequestParam(name = "username")String user, @RequestParam(name = "alias")String a) {
            System.out.println(user);
            System.out.println(a);
        }
    }
    
    @Request Mappingと@Request Paramコメント